1. 程式人生 > >簡單高精度加法

簡單高精度加法

efi std enter strlen printf col CA 其中 color

【高精度】簡單高精度加

題目描述

修羅王解決了計算機的內存限制問題,終於可以使用電腦進行大型的魔法運算了,他交給邪狼的第一個任務是計算兩個非負整數A、B的和,其中A和B的位數在5000位以內。

輸入

共兩行數據,第一行為一個非負整數A,第二行為一個非負整數B,A、B的位數均在5000以內。

輸出

輸出一個非負數,即兩數之和。

樣例輸入

1111111111
2222222222

樣例輸出

3333333333
#include <bits/stdc++.h>
#define N 5000
#define ZEROCHAR -48
int maxleng(int a,int b)
{
    
return a>b?a:b; } int transnumber(char c) { return c-0; } int main() { char a[N+5],b[N+5]; memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); scanf("%s %s",a,b); int len1=strlen(a); int len2=strlen(b); int i; for(i=0;i<(len1+1)/2;++i) { if(i==len1-1-i)
break; a[i]=a[i]+a[len1-1-i]; a[len1-1-i]=a[i]-a[len1-1-i]; a[i]=a[i]-a[len1-1-i]; } for(i=0;i<(len2+1)/2;++i) { if(i==len2-1-i) break; b[i]=b[i]+b[len2-1-i]; b[len2-1-i]=b[i]-b[len2-1-i]; b[i]=b[i]-b[len2-1-i]; }
int leng=maxleng(len1,len2); int c,psum,sum[N+5],an,bn; for(i=0,c=0,psum=0;i<=leng;++i) { an=transnumber(a[i]); bn=transnumber(b[i]); if(an==ZEROCHAR) an=0; if(bn==ZEROCHAR) bn=0; psum=an+bn+c; sum[i]=psum%10; c=psum/10; } int sumleng=(sum[leng]>0?leng+1:leng); for(i=sumleng-1;i>=0;--i) { printf("%d",sum[i]); } printf("\n"); return 0; }

簡單高精度加法