当我运行这段代码时,我得到的输出没有任何意义。我很可能只是错过了一些东西,但是我一直在努力通过手工解决问题来试图找到问题,但是当我手工完成时,我会得到应有的价值。该计算的简化版本是(c%10^n-c%10 ^(n-1))/ 10 ^(n-1)。为什么我的模操作会给我虚假的值?
此计算的目标是将数字的数字指定给整数的数组。我并不是在寻找替代解决方案。
int cNumberV[nLength];
for(int n = nLength; n > 0; n--) {
cNumberV[nLength - n] = (cNumber % (long long) pow(10, n) - cNumber % (long long) pow(10, n - 1))/(long long) pow(10, n - 1);
printf("%i\n", cNumberV[n]);
}
这是我的输出时cNumber = 5105105105105100和nLength = 16:
-1981492631
232830
-1530494976
1188624
-397102900
134514540
-1081801416
1188624
0
1
5
0
1
5
0
1
'pow'是一个浮点运算,并将其结果转换为整数类型将抛出小数部分。从本质上讲,你可能会在'%9.999999'的地方得到'%9'的操作。 – usr2564301 2014-11-24 23:34:10
@quantdev抱怨使用'pow'(一个浮点函数)在这里是有效的,尽管我认为对于IEEE754来说,它总是可以正确表示的,所以它应该可以工作 – 2014-11-24 23:37:54
为什么*不寻找替代解决方案?“这种解决方案是可怕的,甚至如果正在工作获得一个整数的数字只需要在循环内部划分一个整数(假设你的编译器足够聪明,可以将a和%优化为一个分区) – 2014-11-24 23:39:37