当我运行此代码时,我得到的输出实际上没有任何意义。我很可能只是遗漏了一些东西,但我一直在努力通过手工解决问题来找到我的代码的问题,但是当我手工完成时,我得到了我应该得到的值。该计算的简化版本是(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
答案 0 :(得分:3)
问题是您的循环设置了cNumberV[nLength - n]
,但随后打印出cNumberV[n]
。
因此,循环的前半部分打印未初始化的数组条目,循环的后半部分以相反的顺序打印上半部分计算的结果(但是由于rowan指出的逐个错误)。 G,它从不打印第一个数字。)
答案 1 :(得分:1)
pow()
是一种昂贵且不准确的浮动函数。只有你
需要简单的整数除以十来得到数字。如果你真的想要
如上所述让它们从左到右,用一个查找表
10个整数的19个幂。
#include <stdio.h>
#define nLength 20
long long cNumber = 5105105105105100;
int cNumberV[nLength];
int negative = 0;
int main(int argc, char *argv[]) {
if (cNumber < 0) {
negative = 1;
cNumber = -cNumber;
}
int n;
for (n = nLength - 1; n >= 0; n -= 1) {
cNumberV[n] = cNumber % 10;
cNumber /= 10;
if (0 == cNumber) break;
}
if (negative) printf("-");
for (int i = n; i < nLength; i += 1) {
printf("%1d", cNumberV[i]);
}
printf("\n");
}