#include <stdio.h>
#include 
<stdlib.h>
#include 
<string.h>
#define MAX 400 
void my_read(int *a) 

    
int len,i,flag=0
    
char s[MAX]; 
    aa: 
    
while(1
    

        scanf(
"%s",&s); 
        len
=strlen(s); 
        
if (s[0]=='-') flag=1
        
for(i=len-flag;i>=1;i--
        

            
if ((s[len-i]-'0')<0||(s[len-i]-'0')>9
            

                printf(
"\t\t\t你输入的第%d位不合法,按任意键重新输!!",len-i+1); 
                getchar(); 
                
goto aa; 
            }
 
            
else 
            a[i]
=s[len-i]-'0'
        }
 
        
if (flag) a[0]=-(len-1); 
        
else a[0]=len; 
        
break
    }
 
    
return
}
 

void my_print(int *a) 

    
int i; 
    
if (a[0]<0) printf("-"); 
    
if (a[0]==0
    

        printf(
"0"); 
        
return
    }
 
    
for(i=abs(a[0]);i>=1;i--
    printf(
"%d",a[i]); 
    printf(
"\n"); 
}
 

void format(int *a) 

    
int p; 
    
for(p=1;p<a[0]||a[p]>=10;p++
    

        
if (p>=a[0]) a[p+1]=0
        a[p
+1]+=a[p]/10
        a[p]
=a[p]%10
    }
 
    
if (p>=a[0]) a[0]=p; 
    
return
}
 
void add(int *a,int *b,int *c) 

    
int len,i; 
    
if (a[0]<b[0]) len=a[0]; 
    
else len=b[0]; 
    
for(i=1;i<=len;i++)
        c[i]
=a[i]+b[i]; 
    
if (len<a[0]) 
    

        
for (;i<=a[0];i++)
            c[i]
=a[i]; 
        c[
0]=a[0]; 
    }
 
    
else 
    

        
for(;i<=b[0];i++
        

            c[i]
=b[i]; 
        }
 
        c[
0]=b[0]; 
    }
 
    format (c); 
}
 

void commaltiply (int *a,int x,int *b) 

    
int i; 
    
for(i=1;i<=a[0];i++
        b[i]
=a[i]*x; 
    b[
0]=a[0]; 
    format(b); 
    
return
}
 
void mutiply(int *a,int *b,int *c) 

    
int i,temp[MAX],j; 
    commaltiply(a,b[
1],c); 
    
for(i=2;i<=b[0];i++
    

        
if (b[i]==0
        

            c[
0]++
            
for (j=c[0];j>1;j--
            c[
1]=0
        }
 
        
else 
        

            commaltiply(a,b[i],temp); 
            
for(j=1;j<i;j++
            commaltiply(temp,
10,temp); 
            add(c,temp,c); 
        }
 
    }
 
}
 
void dectobin(int *a,int *b) 

    
int p; 
    b[
0]=0
    
while(a[0]>0
    

        b[
0]++
        b[b[
0]]=a[1]%2
        p
=a[0]; 
        
while(p>0
        

            
if (a[p]%2 && p>1) a[p-1]+=10
            a[p]
/=2
            
if (a[a[0]]==0) a[0]--
            p
--
        }
 
    }
 
}
 

void format1(int *a) 

    
int i; 
    
for (i=1;i<=a[0];i++
        
if (a[i]<0
        
{    
            a[i]
+=10
            a[i
+1]-=1
        }
 
}
 

void sub_1(int *a,int *b,int *c) 

    
int i; 
    
for (i=1;i<=b[0];i++
        c[i]
=a[i]-b[i]; 
    
if (a[0]==b[0]) goto loop; 
    
for (;i<=a[0];i++
        c[i]
=a[i]; 
loop: 
    c[
0]=a[0]; 
    format1(c); 
    i
=c[0]; 
    
while(1
        
if (c[i]==0) i--
        
else break
    c[
0]=i; 
    
return
}
 


void sub(int *a,int *b,int *c) 

    
int i,flag=0
    
for (i=1;i<=a[0];i++
        
if (a[i]!=b[i]) { flag=1break; } 
    
if (flag==0
        c[
0]=0
        
return
    }
 
    flag
=0
    
if (a[0]==b[0]) 
        i
=a[0]; 
        
while(i>0
        

            
if (a[i]>b[i])
                sub_1(a,b,c); 
                
break
            }
 
            
if (a[i]<b[i])
                flag
=1
                sub_1(b,a,c); 
                
break
            }
 
            i
--
        }
 
    }
 
    
if (a[0]>b[0]) 
    sub_1(a,b,c); 
    
else 
    
if (a[0]<b[0]) 
    

        flag
=1
        sub_1(b,a,c); 
    }
 
    
if (flag) 
    c[
0]=-c[0]; 
    
else 
    c[
0]=c[0]; 
}
 
void main() 

    
int i,a[MAX],b[MAX],c[MAX]; 
    
char yn; 
    strat: 
    
while(1
    

        system(
"cls");//clrscr(); 
        printf("\n\n\n"); 
        printf(
"\t\t\t**************************************\n"); 
        printf(
"\t\t\t* *\n"); 
        printf(
"\t\t\t* 1.大整数的加法 *\n"); 
        printf(
"\t\t\t* 2.大整数的减法 *\n"); 
        printf(
"\t\t\t* 3.大整数的乘法 *\n"); 
        printf(
"\t\t\t* 4.大整数进制转换 *\n"); 
        printf(
"\t\t\t* 5.帮助 ?*\n"); 
        printf(
"\t\t\t* 6.退出 *\n"); 
        printf(
"\t\t\t* *\n"); 
        printf(
"\t\t\t**************************************\n"); 
        printf(
"\n\n\t\t\t 请选择(1-6):"); 
        yn
=getchar(); 
        
if (yn=='1'||yn=='2'||yn=='3'||yn=='4'||yn=='5'||yn=='6'break
        
else 
        

            printf(
"\n\t\t\t 输入不合法!按任意键重新输入!!!!"); getchar(); 
        }
 
    }
 
    system(
"cls");//clrscr(); 
    if (yn=='6'return
    
if (yn=='4'
    

        printf(
"请输入待转换的大整数:"); 
        printf(
"\n"); 
        my_read(a); 
        
for (i=1;i<=abs(a[0]);i++
        b[i]
=a[i]; 
        b[
0]=a[0]; 
        
if (a[0]<0{a[0]=-a[0];dectobin(a,c);a[0]=-a[0];c[0]=-c[0];goto e;} 
        dectobin(a,c); 
        e: 
        printf(
"十进制:"); 
        my_print(b); 
        printf(
"二进制:"); 
        my_print(c); 
        
goto loop; 
    }
 
    printf(
"请输入大整数A:"); 
    my_read(a); 
    printf(
"请输入大整数B:"); 
    my_read(b); 
    
if (yn=='1'
    

        
if (a[0]<0 && b[0]<0{a[0]=-a[0];b[0]=-b[0];add(a,b,c);c[0]=-c[0];a[0]=-a[0];b[0]=-b[0];goto c;} 
        
if (a[0]>0 && b[0]<0{b[0]=-b[0];sub(a,b,c);b[0]=-b[0];goto c;} 
        
if (a[0]>0 && b[0]>0{add(a,b,c);goto c;} 
        
if (a[0]<0 && b[0]>0{a[0]=-a[0];sub(b,a,c);a[0]=-a[0];goto c;} 
        c: 
        printf(
"\n\t\t\t"); 
        printf(
"A="); 
        my_print(a); 
        printf(
"\n\t\t\t"); 
        printf(
"B="); 
        my_print(b); 
        printf(
"\n\t\t\t"); 
        printf(
"C=A+B="); 
        my_print(c); 
        
goto loop; 
    }
 
    
if (yn=='2'
    

        
if (a[0]<0 && b[0]<0{a[0]=-a[0];b[0]=-b[0];sub(b,a,c);a[0]=-a[0];b[0]=-b[0];} 
        
if (a[0]<0 && b[0]>0{a[0]=-a[0];add(a,b,c);a[0]=-a[0];c[0]=-c[0];} 
        
if (a[0]>0 && b[0]<0{b[0]=-b[0];add(a,b,c);b[0]=-b[0];} 
        
if (a[0]>0 && b[0]>0) sub(a,b,c); 
        printf(
"A="); 
        my_print(a); 
        printf(
"\nB="); 
        my_print(b); 
        printf(
"\nC=A-B="); 
        my_print(c); 
        
goto loop; 
    }
 
    
if (yn=='3'
    

        
if (a[0]<0 && b[0]>0{a[0]=-a[0];mutiply(a,b,c);a[0]=-a[0];c[0]=-c[0];goto d;} 
        
if (a[0]>0 && b[0]<0{b[0]=-b[0];mutiply(a,b,c);b[0]=-b[0];c[0]=-c[0];goto d;} 
        
if (a[0]<0 && b[0]<0{a[0]=-a[0];b[0]=-b[0];mutiply(a,b,c);a[0]=-a[0];b[0]=-b[0];goto d;} 
        mutiply(a,b,c); 
        d: 
        printf(
"\n\tA="); 
        my_print(a); 
        printf(
"\n\tB="); 
        my_print(b); 
        printf(
"\n\tC=A*B="); 
        my_print(c); 
        
goto loop; 
    }
 
    loop: 
    
while(1
    

        printf(
"\n\t\t\t继续计算吗?(y/n)"); 
        yn
=getchar(); 
        
if (yn=='y'goto strat; 
        
if (yn=='n'return
    }
 
}