我正在尝试找到任意长度的整数的n
位数。我打算将整数转换为字符串并使用索引n处的字符...
char Digit = itoa(Number).at(n);
...但后来我意识到itoa
功能不是标准功能。还有其他办法吗?
答案 0 :(得分:17)
(number/intPower(10, n))%10
只需定义函数intPower
。
答案 1 :(得分:3)
您还可以在循环中使用%运算符和/进行整数除法。 (给定整数n> = 0,n%10给出单位数字,n / 10表示单位数字。)
答案 2 :(得分:1)
Itoa在stdlib.h。
您也可以使用替代itoa:
Alternative to itoa() for converting integer to string C++?
或
ANSI C, integer to string without variadic functions
答案 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等)做同样的事情。