从两个整数之间的除法返回第n个数字

时间:2016-02-02 21:12:45

标签: c++

是否可以从两个整数的除法中返回第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);

1 个答案:

答案 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));

希望它会有所帮助。希望它不需要解释(不要忘记删除[]数组)