CODEVS 3116 高精度加法

题目描述 Description

给出两个正整数A和B,计算A+B的值。保证A和B的位数不超过500位。

输入描述 Input Description

读入两个用空格隔开的正整数

输出描述 Output Description

输出A+B的值

样例输入 Sample Input

3 12

样例输出 Sample Output

15

数据范围及提示 Data Size & Hint

两个正整数的位数不超过500位

#include <cstdio>
#include <string>
#include <iostream>
#include <cmath>
#include <sstream>
#include <algorithm>
using namespace std;
int main()
{
    string a,b,c;
    int tmpa,tmpb,tmpc,tmp=0;
    cin >> a >> b;
    c=a;    
    int signn=0;
    //if(int((b.length())-int(a.length()))>0) {    	a=b;b=c;signn=1;}
    //if((int((b.length())-int(a.length()))==0)&&(a[0]<b[0]))	{    	a=b;b=c;signn=1;}
    b.insert(0,"0");
    a.insert(0,"0");
    while(int((a.length())-int(b.length()))>0) b.insert(0,"0");
    while(int((b.length())-int(a.length()))>0) a.insert(0,"0"); 
    ostringstream s1;
    for(int i=a.length()-1;i>=0;i--){
    	sscanf(&a[i],"%1d",&tmpa);
    	sscanf(&b[i],"%1d",&tmpb);  	
    	if((tmpc=tmpa+tmpb+tmp)>=10){
    		tmpc-=10;
    		tmp=1;
    		}else tmp=0;    		
    	s1<<tmpc;
    }   	 	
    //if(signn)cout<<"-";
    c=s1.str();
    reverse(c.begin(),c.end());
    while(c[0]=='0') c.erase(0,1);
    cout<<c;
}

 

此条目发表在CODEVS分类目录。将固定链接加入收藏夹。