2016-02-02 66 views
0

是否可以返回兩個整數除法的第100個十進制數字?我問的原因是因爲我試圖從小數部分的結果輸出小數點右邊的數字到1000個字符的數組中。返回兩個整數之間除法的第n個數字

這是我當前的功能(有明顯的舍入誤差),如果有幫助:

char number[1000]; //to hold 1000 digits 
for (short i = 0; i < 1000; i++) 
    { 
     number[i] = (char)fmod((numerator * pow(10, i + 1)/denominator), 10); 
+6

您正在使用的浮點運算不會接近100位數。您需要在整個過程中將所有內容保留爲整數。按照你在學校學到的方式進行長時間的分工。 –

+1

你可以使用像[this]這樣的任意精度算術庫來實現,內置類型的精度要低得多。 –

+0

@Bob__我無法找到關於如何安裝或使用Windows版GMP的教程。 – Larrimus

回答

0

正如馬克·蘭塞姆說 - 你必須做長除法。

對於n小數使用:

inline char* function_name(const size_t digits, const int numerator, const int denominator) 
{ 
    char *retVal(new char[digits]); 
    int reminder(numerator%denominator); 
    for(size_t i(digits); i>0; --i) 
    { 
     reminder *= 10; 
     *retVal = '0' + reminder/denominator; 
     ++retVal; 
     reminder %= denominator; 
    } 
    return (retVal-digits); 
} 

對於第n個小數點使用:

inline char function_name2(const size_t digit, const int numerator, const int denominator) 
{ 
    int reminder(numerator%denominator); 
    for(size_t i(digit); i>1; --i) 
     reminder = (reminder*10)%denominator; 
    return ('0' + (reminder*10/denominator)); 
} 

(很抱歉,但我不擅長命名功能)

要使用它們只是做了以下:

char *digits(function_name(31, x, y)); 
char digit(function_name2(31, x, y)); 

希望它會幫助。希望它不需要解釋(並且不要忘記刪除[]數組)

+0

我不打算使用動態數組。 – Larrimus

相關問題