如何计算和动态地推导出''相当于整数? e.g:
我理解人们需要计算出确切的位置。我知道一个技巧是将整数变成一个字符串,计算有多少个位置(通过多少个字符),然后创建我们的未来值乘以得到的第十个值 - 就像我们如何会用笔和纸 - 例如:
char integerStr[7] = "186907";
int strLength = strlen(integerStr);
double thsPlace = 0.0F;
for (int counter = 0; counter < strLength; ++counter) {
thsPlace = 0.1F * thsPlace;
}
但是解决这个问题的非字符串算术方法是什么?
答案 0 :(得分:4)
伪代码:
n / pow(10, floor(log10(n))+1)
答案 1 :(得分:1)
将原始值重复除以10,直至小于1:
int x = 69105;
double result = (double) x;
while (x > 1.0) x /= 10.0;
/* result = 0.69105 */
请注意,这不适用于负值;对于那些,你需要对绝对值执行算法,然后否定结果。
答案 2 :(得分:1)
[为奇怪的缩进编辑]
我不确定你对你的问题究竟是什么意思,但这就是我要做的事情:
int placeValue(int n)
{
if (n < 10)
{
return 1;
}
else
{
return placeValue(n / 10) + 1;
}
}
[这是一种递归方法]
答案 3 :(得分:0)
我不知道pow(10, x)
版本的性能如何,但您可以尝试使用整数运算来完成大部分工作。假设我们只处理正值或0(如果需要,使用绝对值):
int divisor = 1;
while (divisor < x)
divisor *= 10;
if (divisor > 0)
return (double)x / divisor;
注意上面需要一些保护措施,即检查除数是否有溢出(在这种情况下,它会是负数),如果x是正数等等。但我认为你可以自己做。