uva 424 - Integer Inquiry

这是一题大数相加,如果大数相加一定要用数组做。

这里提供一段用两个数组进行相加的算法,是刘汝佳老师编写,s1,s2都是反转过的数组,比如大数为123456789,那数组从0-8的应该是 987654321

string ssum(string s1,string s2){
    char c[100];
    int len=0;
    int temp=MAX(s1.size(),s2.size());
    for(int i=0,g=0;g||i<temp;i++){
        int x=g;
        if(i<s1.size()) x+=s1[i]-48;
        if(i<s2.size()) x+=s2[i]-48;
        c[len++]=x%10+48;
        g=x/10;
    }
    c[len]='\0';
    string cc=c;
    return  cc;
}

下面是accept的代码

#include<string>
#include<iostream>
using namespace std;
#define  MAX(X,Y) ((X)<(Y))?(Y):(X)
void reverse(string& s){
    for(int i=0;i<s.size()/2;i++){
        char temp=s[i];
        s[i]=s[s.size()-1-i];
        s[s.size()-1-i]=temp;
    }
}
string ssum(string s1,string s2){
    char c[100];
    int len=0;
    int temp=MAX(s1.size(),s2.size());
    for(int i=0,g=0;g||i<temp;i++){
        int x=g;
        if(i<s1.size()) x+=s1[i]-48;
        if(i<s2.size()) x+=s2[i]-48;
        c[len++]=x%10+48;
        g=x/10;
    }
    c[len]='\0';
    string cc=c;
    return  cc;
}
int main(){
    string l,lsum("0");
    while(getline(cin,l)){
        if(l[0]=='0')
            break;
        reverse(l);
        lsum=ssum(lsum,l);
    }
    reverse(lsum);
    cout<<lsum<<endl;
    //system("pause");
}

 

posted on 2013-12-18 20:46  云在心  阅读(172)  评论(0)    收藏  举报

导航