1. 程式人生 > 其它 >poj1503(高精度模擬加法)

poj1503(高精度模擬加法)

技術標籤:高精度模擬加法演算法

題意:將兩個大數相加。

#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
const int maxx=1003;
char s1[maxx][maxx];
char s2[maxx];
int a[maxx];
int b[maxx];
int c[maxx];
int main(){
	memset(a,0,sizeof(a));
	memset(c,0,sizeof(c))
; memset(b,0,sizeof(b)); int j=0; while(cin>>s1[j]){ if(s1[j][0]=='0'&&strlen(s1[j])==1)break; j++; } int k=0; int n=strlen(s1[k]); for(int i=0;i<n;i++){ a[n-i]=s1[k][i]-'0'; } k++; int m=strlen(s1[k]); for(int i=0;i<m;i++){ b[m-i]=s1[k][i]-'0'; } int len=max(n,m)+1; for
(int i=0;i<len;i++){ int v=a[i]+b[i]; if(c[i]+v>=10){ c[i+1]=(v+c[i])/10; c[i]=(c[i]+v)%10; }else{ c[i]+=v; } } while(c[len]==0&&len>0)len--; memset(b,0,sizeof(b)); for(int i=1;i<=len;i++){ b[i]=c[i]; } memset(c,0,sizeof(c)); k++; while(k<j){ memset(a,0,sizeof
(a)); n=strlen(s1[k]); for(int i=0;i<n;i++){ a[n-i]=s1[k][i]-'0'; } len=max(len,n)+1; for(int i=0;i<len;i++){ int v=a[i]+b[i]; if(c[i]+v>=10){ c[i+1]=(v+c[i])/10; c[i]=(c[i]+v)%10; }else{ c[i]+=v; } } while(c[len]==0&&len>0)len--; memset(b,0,sizeof(b)); for(int i=1;i<=len;i++){ b[i]=c[i]; } memset(c,0,sizeof(c)); k++; } for(int i=len;i>0;i--){ cout<<b[i]; } return 0; }