在c ++中大量的因子

时间:2015-03-22 07:06:17

标签: c++ c++11

我是c ++的初学者。我在CodeChef中解决了问题并遇到了这个问题:http://www.codechef.com/problems/FCTRL2

问题要求您找到大数的阶乘。为了达到这个目的,我试图进行逐位数乘法。但是,在第39行的代码中,“b [i] * c [j] * pow(10,(i + j))+ x”之和从循环的第3次迭代中减少1。我无法弄清楚总和减少1的原因。

Kingly帮我解决了这个问题。

以下是代码:

    #include <iostream>
    #include <cstdio>
    #include <cmath>

    using namespace std;

    // to find the number of digits
    int num_digits(int val) {
        int digits = 0;
        while(val) {
            val /= 10;
            digits++;
        }
        return digits;
    }

    int main() {
       std::ios_base::sync_with_stdio(false);
       int b[10], c[10], num1, num2, x=0, num_inputs;
       std::cin >> num_inputs;
       while(num_inputs) {
            std::cin >> num1;
            num2 = num1 - 1;

            int num1_digits = num_digits(num1);
            int num2_digits = num_digits(num2);

            int temp1 = num1;
            int temp2 = num2;

            while(num2>0) {
                std::cout << temp2 << " " << temp1 << " " << num1_digits << " " << num2_digits<< endl;
                for(int i=0; i<num2_digits; i++) {
                    b[i] = temp2 % 10;
                    temp2 /= 10;
                        for(int j=0; j<num1_digits; j++) {
                            c[j] = temp1 % 10;
                            temp1 /= 10;
                            std::cout << b[i] << " " << c[j] << " " << pow(10, (i+j)) << " ";
                            x = b[i] * c[j] * pow(10,(i+j)) + x; // the sum is getting reduced by 1
                            std::cout << x << endl;
                        }
                    temp1 = num1;
                }
                num2--;
                temp2 = num2;
                temp1 = x;
                x = 0;
                num1_digits = num_digits(temp1);
                num2_digits = num_digits(temp2);

            }
            std::cout << temp1;
            num_inputs--;
       }
       return 0;
    }

1 个答案:

答案 0 :(得分:0)

pow是浮点求幂,而不是整数求幂。只有在需要近似浮点结果时才应该使用它,而不是精确的整数结果。