正如马克·兰塞姆说 - 你必须做长除法。
对于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));
希望它会帮助。希望它不需要解释(并且不要忘记删除[]数组)
您正在使用的浮点运算不会接近100位数。您需要在整个过程中将所有内容保留为整数。按照你在学校学到的方式进行长时间的分工。 –
你可以使用像[this]这样的任意精度算术库来实现,内置类型的精度要低得多。 –
@Bob__我无法找到关于如何安装或使用Windows版GMP的教程。 – Larrimus