查找数字的特定数字

时间:2010-12-10 15:55:04

标签: c++ integer digit

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

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

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

9 个答案:

答案 0 :(得分:17)

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

只需定义函数intPower

答案 1 :(得分:3)

您还可以在循环中使用%运算符和/进行整数除法。 (给定整数n> = 0,n%10给出单位数字,n / 10表示单位数字。)

答案 2 :(得分:1)

答案 3 :(得分:1)

number = 123456789
n = 5

tmp1 = (int)(number / 10^n);   // tmp1 = 12345
tmp2 = ((int)(tmp1/10))*10;    // tmp2 = 12340
digit = tmp1 - tmp2;           // digit = 5

答案 4 :(得分:1)

您可以使用ostringstream转换为文本字符串,但是 一个函数:

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

应该可以解决很少的并发症。 (对于 首先,它处理n大于数字的情况 数字正确。)

- 詹姆斯坎泽

答案 5 :(得分:1)

还可以通过函数 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个元素,你必须在循环中“向后走”,从总int 长度中减去。

希望这有帮助。

答案 6 :(得分:1)

直接答案是:

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

您应该包含<math>

答案 7 :(得分:0)

const char digit = '0' + number.at(n);

假设number.at(n)返回0 ... 9范围内的十进制数字,即。

答案 8 :(得分:0)

更通用的方法:

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

让你对不同的基数(例如16,32,64等)做同样的事情。