我是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;
}
答案 0 :(得分:0)
pow
是浮点求幂,而不是整数求幂。只有在需要近似浮点结果时才应该使用它,而不是精确的整数结果。