您的位置:首页 > 其它

九度OJ 1076 N的阶乘 大数乘法

2017-03-12 10:04 381 查看
这一题和上一题的大数加法很接近,但是不能再用数组的一位表示数字的一位了,因为乘到后面每次的乘数都是好几位的了,用一位根本无法表示,所以这里用数组的一位表示四位数。

因为一位表示四位数,所以输出时要注意,若为“0001”,不能当做“1”输出了,应用“%04d”来输出。

题目描述:

输入一个正整数N,输出N的阶乘。

输入:

正整数N(0<=N<=1000)

输出:

输入可能包括多组数据,对于每一组输入数据,输出N的阶乘

样例输入:

4

5

样例输出:

24

120

1307674368000

代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct bigint
{
int digit[1000];
int size;

bigint operator * (const int &b) const //每次乘以一个小整数
{
int carry = 0;
bigint ans;
memset(ans.digit,0,sizeof(ans.digit));
ans.size = 0;

for(int i = 0; i < size; i++)
{
int t = digit[i] * b + carry;
carry = t / 10000;
ans.digit[ans.size++] = t % 10000;
}
if(carry > 0)
ans.digit[ans.size++] = carry;
return ans;
}
};

int main()
{
int n;
while(scanf("%d",&n) != EOF)
{
if(n == 0)
{
printf("1\n");
continue;
}
bigint ans;
memset(ans.digit,0,sizeof(ans.digit));
ans.size = 1;
ans.digit[0] = 1;
for(int i = 1; i <= n; i++)
{
ans = ans * i;
}
for(int i = ans.size-1; i >= 0; i--)
{
if(i == ans.size-1)
printf("%d",ans.digit[i]);
else
printf("%04d",ans.digit[i]);
}
printf("\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: