void Add(char s1[],char s2[]) //需要两个字符串参数&&无返回值
{
int num1[M],nm2[M];
int i,j;
len1=strlen(s1);
len2=strlen(s2);
for(i=len1-1,j=0;i>=0;i--)//num[0]保存的是低位
num1[j++]=s1[i]-'0';
for(i=len2-1,j=0;i>=0;i--)
num2[j++]=s2[i]-'0';
for(i=0;i<M;i++)
{
num1[i]+=num2[i];
if(num1[i]>9)
{
num1[i]-=10;
num1[i+1]++;
}
}
for(i=M;(i>=0)&&(num1[i]==0);i--)//找到第一个不是零的数
{
if(i>=0)
for(;i>=0;i--)
printf("%d",num1[i]);
else
printf("0\n")
}
加法2
void Add(char a[],char b[],char d[])
{
char c[10001];
int lena=strlen(a),lenb=strlen(b);
int i,j,len;
len=lena>lenb?lena:lenb;
len++;
c[0]='\0';
for(i=1;i<=len;i++)c[i]='0';
for(i=1;i<=lena;i++)c[i]+=a[lena-i]-48;
for(i=1;i<=lenb;i++)c[i]+=b[lenb-i]-48;
for(i=0;i<=len;i++)
if(c[i]>57)
{
c[i]-=10;
c[i+1]++;
}
for(i=len;i>1;i--)
if(c[i]==48)len--;
else break;
for(i=0;i<=len;i++)
d[i]=c[len-i];
}
减法1
//d2 > d1,如果需要比较大小自己加一个不麻烦。
void dec(char *d1, char *d2, char *out)
{
int len_min = strlen(d1);
int len_max = strlen(d2);
int last_j = 0; //最关键的错位
while(len_min > 0)
{
int dd1 = d1[len_min - 1] - '0';
int dd2 = d2[len_max - 1] - '0';
if (last_j) dd2 = dd2 - 1;
last_j = dd2 >= dd1 ? 0 : 1;
dd2 = dd2 >= dd1 ? dd2 : dd2 + 10;
out[len_max] = (dd2 - dd1) + '0';
len_max -- ;
len_min -- ;
}
while(len_max > 0)
{
int dd2 = (d2[len_max -1] - '0');
if (last_j) dd2 = dd2 - 1;
last_j = dd2 >= 0 ? 0 : 1;
dd2 = dd2 >= 0 ? dd2 : dd2 + 10;
out[len_max] = dd2 + '0';
len_max --;
}
if (last_j)
out[0] ='1';
else
out[0] ='0';
}