大数加减运算
#include<stdio.h>#include<string.h>
#define N 100
void input(char a[N],char b[N]){
printf("请输入第一个数:");
getchar();
gets(a);
printf("\n");
printf("请输入第二个数:");
gets(b);
}
void add(char a[N],char b[N]){
int c[N]={0};
int i,m,n,k,x=0;
int af[N]={0},bf[N]={0};
n=strlen(a);
m=strlen(b);
k=m>n?m:n;
for(i=0;i<n;i++)
af[i]=a[n-i-1]-'0';
for(i=0;i<m;i++)
bf[i]=b[m-i-1]-'0';
for(i=0;i<k;i++){
c[i]+=(af[i]+bf[i])%10;
c[i+1]=(af[i]+bf[i])/10;
}
if(c[i]!=0) k++;
printf("两数之和为:");
for(i=k-1;i>=0;i--){
if(c[i]) x=1;
if(x||i==0) printf("%d",c[i]);
}
printf("\n");
}
void subtract(char a[N],char b[N]){
int c[N]={0};
int i,m,n,k,x,jw=0;
int af[N]={0},bf[N]={0};
n=strlen(a);
m=strlen(b);
k=m>n?m:n;
for(i=0;i<n;i++)
af[i]=a[n-i-1]-'0';
for(i=0;i<m;i++)
bf[i]=b[m-i-1]-'0';
if(n>m) x=0;
if(n==m)
{
for(i=1;i<k;i++)
{
if(af[n-i]==bf[m-i])
i++;
if(af[n-i]!=bf[m-i])
break;
}
if(af[n-i]>bf[m-i])
x=0;
else x=1;
}
if(n<m) x=1;
switch(x)
{
case 0:
for(i=0;i<k;i++){
if(af[i]<bf[i]) jw=10;
c[i]=jw+af[i]-bf[i];
if(jw==10) af[i+1]--;
jw=0;}
break;
case 1:
for(i=0;i<k;i++){
if(af[i]>bf[i]) jw=10;
c[i]=jw-af[i]+bf[i];
if(jw==10) bf[i+1]--;
jw=0;}
break;
}
printf("两数之差为:");
if(c[k-1]!=0)
printf("%d",c[k-1]);
for(i=k-2;i>=0;i--)
printf("%d",c[i]);
printf("\n");
}
int main(){
int flag;
char a[N],b[N];
do{
printf("1、大数加法运算\n");
printf("2、大数减法运算\n");
printf("0、退出\n");
printf("请选择命令:\n");
scanf("%d",&flag);
switch(flag)
{
case 1:
input(a,b);
add(a,b);
break;
case 2:
input(a,b);
subtract(a,b);
break;
}
}while(flag!=0);
return 0;
}
当它选择命令1命令2的时候,一个正数一个负数就不对了,怎么修改可以实现比如:命令1 第一个数 100000000 第二个数-10000 输出为99990000
命令2 第一个数 -2000000000 第二个数 -1000000000 输出为-1000000000 大神求救!!