2010-09-13 60 views
2

這是我第二次得到來自模運算符的令人困惑的結果,所以我肯定我一定會錯過它的工作原理,我在這裏做錯了什麼,這是讓我錯誤的答案?這個函數應該是一個數字,並將其數字作爲指向數組的返回值(第一個元素表示數字的長度)。它實際上做的是返回一個數組,其中第一個之後的所有索引都包含原始數字。我對使用模運算符有什麼想法?

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 
+0

注意;隨後轉換爲整數可能導致某些平臺(或其他值)上的「99 ... 9」。你可以通過反覆乘以10來保證精確的結果(它也會更快)。 – 2010-09-13 15:29:09

回答

3

您存儲在數字模的結果[I],但你不打印:

digit[i] = (n%blah); 
printf("%dth digit %d\n",i,n); 

n % blah不修改n或等值,它只返回結果。

+0

哦,哈哈,我真是個白癡。 – girlygirl 2010-09-13 07:57:36

1

看來,你總是打印您輸入:你不應該用'pow`這一點,因爲沒有保證結果是準確的

printf("%dth digit %d\n",i,n); 
相關問題