C或C++程序设计 求大数阶乘

来源:百度知道 编辑:UC知道 时间:2024/06/09 07:50:52
求大数阶乘
1 系统的基本功能
编写一个程序,求100以内的数的阶乘。
2 要求及提示
2.1 程序执行过程
(1)系统从键盘读入自然数n,n∈[1,100]。
(2)输出运算的结果,为便于观察结果,每输出四位中间插入空格,格式如下(例如,n=12):
12!= 4790 0160 0
(3)询问用户是否继续进行,用户选择“是”,转(1),否则退出程序。
2.2 算法要求及提示
(1)因为n较大时,n!的结果将超出长整形的保存范围,因此结果不能用long int型的变量来保存。本算法要求用链表或数组来存储。
(2)链表的每一个节点(数组的每一个元素)存储结果的一位数字,因此结果的输出实际上是链表的遍历问题。
2.3 其他要求
(1)输入时具备一定的容错性判断,如输入的不是数字,或输入的数超过范围等等。
(2)变量、函数命名符合规范。
(3)可以的话尽量注释一下

答案好的话严重加分,因为现在给高分的话若没有回答就浪费了分数。诚信!

//输入阶乘数,先计算结果的位数,再动态申请相应的空间,用字符数组保存结果。
int input;
cin >> input;
double numlen = 1.0;
for(int temp=1; temp<=input; temp++)
numlen += log10((double)temp);
cout << (int)numlen << endl;
char *result = new char[(int)numlen+1];
result[(int)numlen] = '\0';
result[0] = '1';
int lenght = 1;
clock_t start,end;
start = time(0);
for (int i = 1; i<=input; i++)
{
int c = 0; //进位标志
for (int j=0; j<lenght; j++)
{
int buf = (result[j]-'0') * i + c; //计算结果
result[j] = buf % 10 + '0'; //取当前位
c = buf / 10; //计算进位
}
while (c)
{
result[lenght++] = c % 10 +'0'; //取当前位
c /= 10; //计算进位
}
}
end = time(0);

for (int k=lenght-1; k>=0; k--)
{
cout<<result[k];
}
cout<<endl;
cout <<