正整数 + - 法
#include <stdio.h>
#include <string.h>
void plus(char *a, char *b, char *c);
void minus(char *a, char *b, char *c);
void minus(char *a, char *b, char *c)
{
int i,j,k;
int la=strlen(a);
int lb=strlen(b);
int flag=0;
memset(c,0,sizeof(c));
int aa[1000],bb[1000],cc[1000];
memset(aa,0,sizeof(aa));
memset(bb,0,sizeof(bb));
memset(cc,0,sizeof(cc));
for(i=la-1;i>=0;i--)
aa[la-i-1]=a[i]-'0';
for(i=lb-1;i>=0;i--)
bb[lb-i-1]=b[i]-'0';
while(la>0 && aa[la-1]==0)
la--;
while(lb>0 && bb[lb-1]==0)
lb--;
if(la==0)
la=1;
if(lb==0)
lb=1;
if(la>lb)
{
flag=1;
}
else if(lb>la)
flag=2;
else
{
for(i=la-1;i>=0;i--)
if(aa[i]>bb[i])
{
flag=1;
break;
}
else if(aa[i]<bb[i])
{
flag=2;
break;
}
else
continue;
}
if(flag==0)
{
c[0]='0';
c[1]='\0';
}
else if(flag==1)
{
for(i=0;i<la;i++)
cc[i]=aa[i]-bb[i];
for(i=0;i<la;i++)
if(cc[i]<0)
{
cc[i]+=10;
cc[i+1]--;
}
while(la>0 && cc[la-1]==0)
la--;
if(la==0)
la=1;
for(i=0;i<la;i++)
c[i]=cc[la-i-1]+'0';
c[la]='\0';
}
else if(flag==2)
{
for(i=0;i<lb;i++)
cc[i]=bb[i]-aa[i];
for(i=0;i<lb;i++)
if(cc[i]<0)
{
cc[i]+=10;
cc[i+1]--;
}
while(lb>0 && cc[lb-1]==0)
lb--;
if(lb==0)
{
c[0]='0';
c[1]='\0';
}
else
{
for(i=0;i<lb;i++)
c[i+1]=cc[lb-i-1]+'0';
c[lb+1]='\0';
c[0]='-';
}
}
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
}
void plus(char *a, char *b, char *c)
{
int aa[1000];
int bb[1000];
int cc[1000];
memset(cc,0,sizeof(cc));
memset(bb,0,sizeof(bb));
memset(aa,0,sizeof(aa));
int la=strlen(a);
int i,j,k;
for(i=la-1;i>=0;i--)
aa[la-i-1]=a[i]-'0';
int lb=strlen(b);
for(i=lb-1;i>=0;i--)
bb[lb-i-1]=b[i]-'0';
int max=la>lb?la:lb;
for(i=0;i<max;i++)
cc[i]=aa[i]+bb[i];
for(i=0;i<max;i++)
if(cc[i]>=10)
{
cc[i]-=10;
cc[i+1]++;
}
memset(c,0,sizeof(c));
if(cc[max]==1) {
for(i=0;i<=max;i++)
c[i]=cc[max-i]+'0';
c[max+1]='\0';
}
else{
while(max>0 && cc[max-1]==0)
max--;
if(max==0)
max=1;
for(i=0;i<max;i++)
c[i]=cc[max-i-1]+'0';
c[max]='\0';
}
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
}
int main()
{
char a[1000];
char b[1000];
char c[1000];
char s[2];
while (scanf("%s %s %s", a, s, b) == 3) {
if (s[0] == '+') {
plus(a, b, c);
} else if (s[0] == '-') {
minus(a, b, c);
}
printf("%s\n", c);
}
return 0;
}
改变下主函数,可变成:高精度加法,正负数皆可
int main()
{
while (scanf("%s%s",a,b)!=EOF) {
if (a[0]!='-' && b[0]!='-') {
plus(a, b, c);
printf("%s\n", c);
}
else if(a[0]=='-' && b[0]!='-')
{
minus(b, a+1, c);
printf("%s\n", c);
}
else if(a[0]!='-' && b[0]=='-')
{
minus(a, b+1, c);
printf("%s\n", c);
}
else if(a[0]=='-' && b[0]=='-'){
plus(a+1, b+1, c);
printf("-");
printf("%s\n", c);
}
}
return 0;
}