2010-06-22 39 views
0

我想下面的代碼工作:拆分雙進陣列在C

double num = 31415; /* num will never have a decimal part */ 
/* ... code here so that we can now say*/ 
printf("%d", num_array[0] == 3 && num_array[1] == 1 && num_array[4] == 5); //1 

我意識到這是瑣碎整型(這樣做只是int i=0; while(num>0) numarr[size-++i]=num%10, num/=10;,其中規模預定爲在數字位數數量),但這顯然不適用於浮動/雙打,因爲你不能修改一個浮動。

是的,我需要使用浮動/雙打,儘管不使用浮點部分(這是一個練習)。

而且我已經想出瞭如何使用floor()函數確定雙精度數字的位數。

/* n > 0, n=floor(n) */ 
int numdigits(double n){ 
    int i = 0; 
    while(n >0) n=floor(n/10), i++; 
    return i; 
} 

回答

6

查找fmod。使用log10可能更容易計算位數。

+0

fmod()做到了。謝謝! – 2010-06-22 20:41:17

+1

對於log10()建議+1。 'int digits =(int)log10(n)+ 1;' – Clifford 2010-06-22 22:29:54

2

這可能是最簡單的只是把它轉換爲字符串:

char* str = malloc(num_digits+1); 
snprintf(str, num_digits+1, "%f", num); 

索引到str會給你每一個數字作爲一個ASCII值,所以你需要減去'0'獲得實際的數值:

str[0] - '0' == 3; 
str[1] - '0' == 1; 
str[2] - '0' == 4; 
... 
+0

我想看看我能不能沒有字符串:)但是,無論如何感謝:) – 2010-06-22 20:41:49

0

除了fmod(),你也可以強制轉換爲int64_t或long long int,並像以前一樣使用%。如果範圍小於10位,則可以使用int32_t。