是否可以从两个整数的除法中返回第100个十进制数?我问的原因是因为我试图将小数点右边的数字从分数的结果输出到1000个字符的数组中。
如果有帮助的话,这里是我当前的功能(有明显的舍入错误):
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);
答案 0 :(得分:0)
正如Mark Ransom所说 - 你必须进行长时间的划分。
使用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));
希望它会有所帮助。希望它不需要解释(不要忘记删除[]数组)