长正整数的加法和乘法,阶乘,程序有点问题,求帮忙看下
题目:【问题描述】设计任意两个长正整数(小于80位)的加法函数add()和乘法函数mult(),并求任意整数(≤58)的阶乘。【实现提示】用无符号整型或字符型数组存储任意长整数。
【测试数据】
6!=720
9!=362880
19!=1216451004088320000
39!=20397882081197443358640281739902897356800000000
程序:
#include<stdio.h>
#include<string.h>
void add(char *a, char *b, char *c){
int carry, i, len1, len2, len;
len1=strlen(a);
len2=strlen(b);
len= len1 > len2 ? len1 : len2 ;
carry=0;
for( i=0; i<len; i++){
if( i < len1 && i < len2 ){
c[len-1-i]=((a[len1-1-i]-'0')+(b[len2-1-i]-'0')+carry)%10+'0';
carry=((a[len1-1-i]-'0')+(b[len2-1-i]-'0')+carry)/10;
}
else{
if( i < len1 && i >= len2 ){
c[len-1-i]=((a[len1-1-i]-'0')+carry )%10 + '0';
carry=((a[len1-1-i]-'0')+carry)/10;
}
if(i>=len1&&i<len2){
c[len-1-i]=((b[len2-1-i]-'0')+carry)%10+'0';
carry=((b[len2-1-i]-'0')+carry)/10;
}
}
}
if(carry>0){
for(i=len;i>0;i--)
c[i]=c[i-1];
c[0]=carry+'0';
c[len+1]=0;
}
else
{
c[len]=0;
}
}
void mult(char*a,char*b,char*c){
int i,j,k,carry,len,flag;
char p[200],y[200];
len=strlen(a)+strlen(b);
memset(p,'0',sizeof(p));
p[len]='\0';
carry=0;
for(i=strlen(a)-1;i>=0;i--)
{
for(j=strlen(b)-1;j>=0;j--){
carry+=(a[i]-'0')*(b[j]-'0')+(p[i+j+1]-'0');
p[i+j+1]=carry%10+'0';
carry/=10;
}
}
if(carry!=0) p[0]=carry+'0';
int x=strlen(p);
k=0;
for(i=0;i<x;i++){
if(p[0]=='0'&&i==0)continue;
c[k]=p[i];
k++;
}
c[k]=0;
}
void jie(char *a,char *b){
char c[10],f[10],g[10],h[10];
strcpy(c,"1");
strcpy(b,"1");
while(1){
strcpy(g,"1");
add(c,g,f);
strcpy(c,f);
mult(b,c,h);
strcpy(b,h);
if(strcmp(c,a)==0)break;
}
}
int main()
{
int n,i;
char a[80], b[80], c[200],d[200],e[200];
while(1){
printf("1.加法运算\n2.乘法运算\n3.阶乘运算\n请选择:");
scanf("%d",&n);
printf("\n");
if(n==1){
printf("【加法运算】请输入:\n");
scanf("%s%s",a,b);
add(a,b,c);
printf("【加法运算】运算结果:\n");
printf("%s + %s = %s\n",a,b,c);
printf("\n");
}
if(n==2){
printf("【乘法运算】请输入:\n");
scanf("%s%s",a,b);
mult(a,b,d);
printf("【乘法运算】运算结果:\n");
printf("%s x %s = %s\n",a,b,d);
printf("\n");
}
if(n==3){
printf("【阶乘运算】请输入:\n");
scanf("%s",a);
jie(a,e);
printf("【阶乘运算】运算结果:\n");
printf("%s ! = %s\n",a,e);
printf("\n");
}
}}
阶乘结果老是不对。谁能帮我查查