#include
#include
#define N 500
void plus() //加法
{
char stra[N],strb[N];
int numa[N],numb[N],c[N],len,i;
cout<<"请输入要进行加法运算的两个长整数"< cin>>stra>>strb; len=strlen(stra)>strlen(strb)?strlen(stra):strlen(strb); for(i=0;i for(i=strlen(stra);i numa[i]=0; for(i=0;i for(i=strlen(strb);i numb[i]=0; for(i=0;i c[len]=0; for(i=0;i c[i+1]=c[i+1]+c[i]/10; c[i]=c[i]%10; } if(c[len]!=0) cout< for(i=len-1;i>=0;i--) cout< cout< } void minus() //减法 { char stra[N],strb[N]; int numa[N],numb[N],c[N],len,i,flag=0; cout<<"请输入要进行减法运算的两个长整数"< cin>>stra>>strb; len=strlen(stra)>strlen(strb)?strlen(stra):strlen(strb); for(i=0;i numa[strlen(stra)-1-i]=stra[i]-'0'; for(i=strlen(stra);i numa[i]=0; for(i=0;i cout< cout< for(i=0;i numb[strlen(strb)-1-i]=strb[i]-'0'; for(i=strlen(strb);i numb[i]=0; for(i=0;i cout< cout< for(i=0;i c[i]=numa[i]+10-numb[i]; numa[i+1]--; } for(i=0;i c[i+1]=c[i+1]+c[i]/10; c[i]=c[i]%10; } c[strlen(stra)-1]=c[strlen(stra)-1]%10; for(i=strlen(stra)-1;i>=0;i--) //输出c,从第一个不为的位置输出 { if(c[i]!=0) flag=1; if(flag==1) cout< } cout< } void multiply() { char stra[N],strb[N]; int numa[N],numb[N],i,j,k,dm=0; int c[N][N],d[2*N]; cout<<"请输入要进行乘法运算的两个长整数"< cin>>stra>>strb; for(i=0;i for(j=0;j c[i][j]=0; for(i=0;i<2*N;i++) d[i]=0; for(i=0;i for(i=0;i for(i=0;i for(j=0;j c[i][j]=numb[i]*numa[j]; for(k=0;k { for(i=1;i for(j=0;j if((k-i-j)==0) c[0][k]+=c[i][j]; d[dm++]=c[0][k]; } for(k=(strlen(stra)-strlen(strb)+1);k { for(i=1;i<(strlen(strb)-1);i++) for(j=0;j if((strlen(strb)-1+k-i-j)==0) c[strlen(strb)-1][k]+=c[i][j]; d[dm++]=c[strlen(strb)-1][k]; } for(i=(dm-1);i>0;i--) //整理d,每一位大于的向上一位置进 { d[i-1]=d[i-1]+d[i]/10; d[i]=d[i]%10; } cout< cout<<"两者之积为:"< for(i=0;i cout< cout< } int main() { int choice; while(1) { cout<<"\n"; cout<<"\n\t\t 长整数的运算 ";//输入一个选择功能菜单cout<<"\n"; cout<<"\n\t\t 1-------长整数的加法 "; cout<<"\n\t\t 2-------长整数的减法 "; cout<<"\n\t\t 3-------长整数的乘法 "; cout<<"\n\t\t 0-------退出 "; cout<<"\n"; cout<<"\n\t\t 请选择菜单号(--3)进行操作:"; cin>>choice; switch(choice) { case 1: plus() ; break; case 2: minus(); break; case 3: multiply(); break; case 0: return 0; } } return 1; }