今天遇到一道题,让我写高精度加法,钻研了一会,写下了代码:
#include<bits/stdc++.h>
using namespace std;
int main()
{
char s[30] , t[30] ;
int a[30] , b[30] , c[30] ;
scanf("%s%s", s, t) ;
int lena=strlen(s) ;
int lenb=strlen(t) ;
int lenc=lena>lenb?lena:lenb;
memset(a, 0, sizeof(a));
memset(b, 0, sizeof(b));
memset(c, 0, sizeof(c));
for(int i=0; i<lena; i++)
a[lena-i] = s[i] - '0';
for(int i=0; i<lenb; i++)
b[lenb-i] = t[i] - '0';
for(int i=1; i<=lenc; i++)
{
c[i]+=a[i]+b[i];
if(c[i]>=10)
{
c[i+1]+=c[i]/10;
c[i]%=10;
}
}
if(c[lenc+1] !=0){
lenc++;
}
for(int i=lenc; i>=1; i--)
printf("%d", c[i]);
return 0;
}
结果错了。。。
发现数组开的不够大。。。
改成了如下代码:
#include<bits/stdc++.h>
using namespace std;
int main()
{
char s[300] , t[300] ;
int a[300] , b[300] , c[300] ;
scanf("%s%s", s, t) ;
int lena=strlen(s) ;
int lenb=strlen(t) ;
int lenc=lena>lenb?lena:lenb;
memset(a, 0, sizeof(a));
memset(b, 0, sizeof(b));
memset(c, 0, sizeof(c));
for(int i=0; i<lena; i++)
a[lena-i] = s[i] - '0';
for(int i=0; i<lenb; i++)
b[lenb-i] = t[i] - '0';
for(int i=1; i<=lenc; i++)
{
c[i]+=a[i]+b[i];
if(c[i]>=10)
{
c[i+1]+=c[i]/10;
c[i]%=10;
}
}
if(c[lenc+1] !=0){
lenc++;
}
for(int i=lenc; i>=1; i--)
printf("%d", c[i]);
return 0;
}
然后就OK了。。。
|