道理类似,从低位到高位做个循环,加法注意是否越界,越界则向上进位;减法则注意减数与被减数关系,小于则借位。 一种实现,你可以参考一下。 void add(char a[],char b[],int x,int y,int f,int d) { char c[102]; int i; int j; int jin=0; int s=0; int m,ma; int xx,yy; if(d==0) { xx=0;yy=0; } if(d==1) { xx=1;yy=0; } if(d==2) { xx=0;yy=1; } if(d==3) { xx=1;yy=1; } x>y?m=x:m=y; ma=m; i=x-1; j=y-1; for(;m>0;i--,j--,m--) { if(j<yy && i>=xx) s=int(a[i])-48+jin; //将字符转换成整型 else if(i<xx && j>=yy) s=int(b[j])-48+jin; else if(i>=xx && j>=yy) s=(int(a[i])-48+int(b[j])-48+jin); if(s>9) { jin=1; c[m]=char(s+38); } else { jin=0; c[m]=char(s+48); } } if(jin==1) c[0]='1'; else c[0]=' '; if(g==1) { cout<<"两数相加的结果为:"; if(f==0) for(i=0;i<ma+1;i++) cout<<c[i]; else { cout<<'-'; for(i=0;i<ma+1;i++) cout<<c[i]; } } if(g==2) { cout<<"两数相减的结果为:"; if(f==0) for(i=0;i<ma+1;i++) cout<<c[i]; else { cout<<'-'; for(i=0;i<ma+1;i++) cout<<c[i]; } } cout<<endl; } // 减函数 void jian(char a[],char b[],int x,int y,int f,int d) { char c[102]; int i; int j; int jin=0; int s=0; int m,ma; int xx,yy; if(d==0) { xx=0;yy=0; } if(d==1) { xx=1;yy=0; } if(d==2) { xx=0;yy=1; } if(d==3) { xx=1;yy=1; } m=x-1; ma=m; i=x-1; j=y-1; for(;m>=0;i--,j--,m--) { if(j<yy&&i>=xx) s=int(a[i])-48-jin; else if(i>=xx&&j>=yy) s=(int(a[i])-48)-(int(b[j])-48)-jin; if(s<0) { jin=1; c[m]=char(s+58); } else { jin=0; c[m]=char(s+48); } } if(g==1) { cout<<"两数相加的结果为:"; if(f==0) for(i=0;i<ma+1;i++) cout<<c[i]; else { cout<<'-'; for(i=0;i<ma+1;i++) cout<<c[i]; } } if(g==2) { cout<<"两数相减的结果为:"; if(f==0) for(i=0;i<ma+1;i++) cout<<c[i]; else { cout<<'-'; for(i=0;i<ma+1;i++) cout<<c[i]; } } cout<<endl; } |