题
我正在尝试找到 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等)。
不隶属于 StackOverflow