我正在尝试找到 n任意长度的整数的数字。我打算将整数转换为字符串,并在index n ...上使用字符

char Digit = itoa(Number).at(n);

...但是然后我意识到 itoa 功能不是标准的。还有其他方法吗?

有帮助吗?

解决方案

(number/intPower(10, n))%10

只需定义功能 intPower.

其他提示

您也可以在循环中使用%操作员和 /进行整数部门。 (给定整数n> = 0,n%10给出了单位数字,而单位数字的n / 10排骨。)

您可以使用ostringstream转换为文本字符串,但是沿着:

char nthDigit(unsigned v, int n)
{
    while ( n > 0 ) {
        v /= 10;
        -- n;
    }
    return "0123456789"[v % 10];
}

应该以减少并发症的麻烦来解决问题。 (对于初学者,它处理n正确数字数量的情况。)

- 詹姆斯·坎兹(James Kanze)

itoa在stdlib.h中。

您也可以使用替代iTOA:
用于将整数转换为字符串C ++的替代方案?
或者
ANSI C,整数都没有变化功能

也可以避免通过功能转换为串起 log10, ,int cmath, ,它返回一个数字的10个基数对数(如果是字符串,则大约是其长度):

unsigned int getIntLength(int x)
{
    if ( x == 0 )
            return 1;
    else    return std::log10( std::abs( x ) ) +1;
}

char getCharFromInt(int n, int x)
{
    char toret = 0;
    x = std::abs( x );
    n = getIntLength( x ) - n -1;

    for(; n >= 0; --n) {
        toret = x % 10;
        x /= 10;
    }

    return '0' + toret;
}

我已经对其进行了测试,并且效果很好(负数是一种特殊情况)。另外,必须考虑到,要找到第n个元素,您必须在循环中“向后走”,从总数中减去 长度.

希望这可以帮助。

直接答案是:

char Digit = 48 + ((int)(Number/pow(10,N)) % 10 );

你应该包括 <math> 图书馆

number = 123456789
n = 5

tmp1 = (int)(number / 10^n);   // tmp1 = 12345
tmp2 = ((int)(tmp1/10))*10;    // tmp2 = 12340
digit = tmp1 - tmp2;           // digit = 5
const char digit = '0' + number.at(n);

假设 number.at(n) 在范围0 ... 9中返回十进制数字。

一种更通用的方法:

template<int base>
int nth_digit(int value, int digit)
{
    return (value / (int)pow((double)base, digit)) % base;
}

只需让您对不同的基本数字做同样的事情(例如16、32、64等)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top