/**
万进制:将原来的一个大数,以4位(10000)为单位分割开,分别存到list[i]中,输出时
输出按照顺序输出list[i] 即可,比如162,0838,9898 * 14
list[0] = 162, list[1] = 0838, list[2] = 9898,分别求出list[i] * 14,判断结果是否大于10000,
若大于10000,则要向list[i-1]进位。
*/#include <stdio.h>
#define maxn 10000
int list[10001];
void compute(int n)
{
for(int i = 0; i < 10001; i++)
list[i] = 1;
int k = 1; //标记有几个数组
int tmp; //万进制的进位位
for(int i = 1; i <= n; i++)
{
tmp = 0;
for(int j = 1; j <= k; j++) //这里是逆序计算的,因此输出的时候要逆序输出
{
list[j] = list[j]*i + tmp;
tmp = list[j] / maxn;
list[j] = list[j] % maxn;
}
if(tmp > 0) //k变化的时机是在计算完一轮后,才将k加1
list[++k] = tmp;
}
printf("%d", list[k]);
for(int i = k-1; i >= 1; i--)
printf("%04d", list[i]); //注意list[i]<=10000,而且是4位的,不足4位要补0
printf("\n");
}
int main()
{
int n;
while(~scanf("%d", &n))
{
compute(n);
}
return 0;
}
N! HDU - 1042(大数相乘-万进制)
最新推荐文章于 2020-01-29 12:54:35 发布