2016-02-02 63 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

相关问题