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"); }
浙公网安备 33010602011771号