大数相加
以1234+78为例,解析大数相加的思路
1 | 2 | 3 | 4 |
---|---|---|---|
+ | |||
7 | 8 | ||
2+1=3 | 7+3=10 10+1=11 11/10=1 11%10=1 | 4+8=12 12+0=12 12/10= 1 12%10=2 | |
1 | 3 | 1 | 2 |
代码演示:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
char *plus(char *s,char *p)
{
int i,j,x,a,b,flag=0;
int len1=strlen(s);
int len2=strlen(p);
int len3;
if(len1>=len2)
{
len3=len1+1;
}
else
{
len3=len2+1;
}
char *arr;
arr=(char*)malloc(sizeof(char)*(len3+1));
arr[len3]='\0';
len1--;
len2--;
len3--;
while(len1>=0||len2>=0)
{
a= (len1>=0)?(s[len1]-'0'):0;
b= (len2>=0)?(p[len2]-'0'):0;
arr[len3]=(a+b+flag)%10+'0';
flag=(a+b+flag)/10;
len1--;
len2--;
len3--;
}
if(flag==0)
{
return ++arr;
}
else
{
arr[0]=1+'0';
return arr;
}
}
int main()
{
char a[100];
char b[100];
gets(a);
gets(b);
puts(plus(a,b));
}
写出来发现还是有很多不成熟的地方,随着学习的深入再加以修正