您的位置:首页 > 其它

大数相乘nyoj28

2013-08-19 22:34 246 查看
描述我们都知道如何计算一个数的阶乘,可是,如果这个数很大呢,我们该如何去计算它并输出它?

输入输入一个整数m(0<m<=5000)输出输出m的阶乘,并在输出结束之后输入一个换行符样例输入
50

样例输出
30414093201713378043612608166064768844377641568960512000000000000


#include <stdio.h>
#include <string.h>
#define M 20000
int shu[M];

int main()
{
int m, i, n, b, t, e;
while(scanf("%d", &m) != EOF){

memset(shu, 0, sizeof(shu));
shu[0] = 1;
n = 0;/*n表示存放进位*/
for(i = 1; i <= m; i++)
{
t = 0;/*t表示进位的数值*/
e = 0;//记得初始化
for(b = 0; b <= n; b++)
{
//    shu[b] *= i;
//    shu[b+1] = shu[b] / 10;
//    shu[b] %= 10;
e = shu[b] * i + t;
t = e / 10;
shu[b] = e % 10;
if(b == n && t != 0)/*为什么要有个b == n?因为有时不是在最高位进1,会产生多余的n++影响输出结果*/
n++;
}

}
for(i = n; i >= 0; i--){

printf("%d", shu[i]);

}
putchar('\n');

}
return 0;
}


View Code

把第二个数分别与第一个数的个位、十位等相乘
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: