这是我第二次得到来自模运算符的令人困惑的结果,所以我肯定我一定会错过它的工作原理,我在这里做错了什么,这是让我错误的答案?这个函数应该是一个数字,并将其数字作为指向数组的返回值(第一个元素表示数字的长度)。它实际上做的是返回一个数组,其中第一个之后的所有索引都包含原始数字。我对使用模运算符有什么想法?
int *getDigits(int n)
{
int digits = log10(n)+1;
int i = 1;
int *digit = malloc((digits+1) * sizeof(int));
if (digit == NULL) { printf("error\n"); }
digit[0] = digits;
for (i = 1; i < digits+1; i++) {
int blah = (int) pow(10,i);
printf("digit[%d] = remainder of %d divided by %d\n",i,n,blah);
digit[i] = (n%blah);
printf("%dth digit %d\n",i,n);
}
return digit;
}
当我运行它每次迭代看起来是这样的:
checking 500996
digit[1] = remainder of 500996 divided by 10
1th digit 500996
digit[2] = remainder of 500996 divided by 100
2th digit 500996
digit[3] = remainder of 500996 divided by 1000
3th digit 500996
digit[4] = remainder of 500996 divided by 10000
4th digit 500996
digit[5] = remainder of 500996 divided by 100000
5th digit 500996
digit[6] = remainder of 500996 divided by 1000000
6th digit 500996
注意;随后转换为整数可能导致某些平台(或其他值)上的“99 ... 9”。你可以通过反复乘以10来保证精确的结果(它也会更快)。 – 2010-09-13 15:29:09