大数存储问题
题目:读入n,m,输出 n!*m!. (1<=n,m<=100) 结果的位数不超过400. 提示:定义一个数组a[400],定义乘法运算,每次乘法结果用数组保存 写的比较菜,各位就随意看看。狗头.jpg
/大数乘法,阶数相乘
#include <stdio.h>
void fun(int n, int a[], int *num)
{
int b[200];
int c[400]={0};
int i, j;
for (i = 0;; i++)
{
if (n == 0)
{
break;
}
b[i] = n % 10;
n = n / 10;
}
n = i;
for (i = 0; i < *num; i++)
{
for (j = 0; j < n; j++)
{
c[i + j] = a[i] * b[j] + c[i + j];
}
}
int flag1 = 1, flag2 = 0;
for (i = 0; i<n+*num; i++)
{
c[i] = c[i] + flag2;
flag1 = c[i] / 10;
a[i] = c[i] % 10;
c[i] = a[i];
flag2 = flag1;
}
while (flag2 != 0)
{
a[i++] = flag2 % 10;
flag2 = flag2 / 10;
}
*num = i;
}
main()
{
int n, m;
int i=0, j=0;
int a[400];
for(i=0;i<400;i++){
a[i]=0;
}
a[0]=1;
scanf("%d %d", &n, &m);
int num = 1;
for (i = 2; i <= n; i++)
{
fun(i, a, &num);
}
for (i = 2; i <= m; i++)
{
fun(i, a, &num);
}
for (i = num - 1; i >= 0; i--)
{
if(a[i]!=0)
break;
}
for (; i >= 0; i--)
{
printf("%d", a[i]);
}
printf("\n");
}
|