昨天公司领导在微信群里出了个题目,要求100的阶乘,我估计常规计算位数不够,要考率其他办法了,今天吃完午饭的时候实现了,办法是用每一个整形保存计算结果的每一位,这样就不会溢出了,然后再处理一下进位问题,代码如下:
#include <stdio.h>
#define resultSize 300
int main(int argc, const char * argv[]) {
int result[resultSize];
for (int i = 0; i < resultSize; i++) {
result[i] = 0;
}
result[0] = 1;
for (int currentNumber = 1; currentNumber < 101; currentNumber ++) {
for (int index = 0; index < resultSize; index++) {
result[index] = result[index] * currentNumber;
}
for (int index = 0; index < resultSize; index++) {
int temp = result[index];
result[index] = temp % 10;
result[index + 1] += temp / 10;
}
}
int index = resultSize - 1;
while (result[index] == 0) {
index --;
}
while (index >= 0) {
printf("%d ", result[index]);
index --;
}
return 0;
}