Adding large numbers in C++
Just wrote a C++ snippet to add huge numbers using strings -
#include <iostream>
using namespace std;
string add (string &s1, string &s2){
int carry=0,sum,i;
string min=s1,
max=s2,
result = "";
// Finds the bigger string
if (s1.length()>s2.length()){
max = s1;
min = s2;
} else {
max = s2;
min = s1;
}
// Fills the result for overlapping regions of sum
for (i = min.length()-1; i>=0; i--){
sum = min[i] + max[i + max.length() - min.length()] + carry - 2*'0';
carry = sum/10;
sum %=10;
result = (char)(sum + '0') + result;
}
// Summates the previous carry and the remaining digits of bigger string
i = max.length() - min.length()-1;
while (i>=0){
sum = max[i] + carry - '0';
carry = sum/10;
sum%=10;
result = (char)(sum + '0') + result;
i--;
}
// Adds the carry if remaining to the last digit e.g 999+1=1000
if (carry!=0){
result = (char)(carry + '0') + result;
}
return result;
}
int main (){
// implementation
string a,b;
cin >> a >> b;
cout << add (a,b)<<endl;
return 0;
}
Output :
32485689234981709712094710984091842358764876328746187648716462938589273589723895789237587238947189748917894718973891728937189478913277893257891749817984719287439812789473289475328975981723894718927489127894712894
9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
32485689234981709712094710984091842358764876328746187648716462938589273599723895789237587238947189748917894718973891728937189478913277893257891749817984719287439812789473289475328975981723894718927489127894712893
Labels: c++, programming, techniques
5 Comments:
Thanks Dude ! Great Code
very good method ;)
Can u explain why u have to add '0'?
To get the ascii equivalent of the numeric value. '0' is 48 in ascii and other digits are arranged sequentially, 0,1,2,3,4,5,6,7,8,9. So say you need to figure out ascii value for '5', we can quickly do '0'+5, and use that as a char value.
Only replace
this:
sum = min[i] + max[i + max.length() - min.length()] + carry - 2*'0';
by:
sum = (min[i] - '0' ) + (max[i + max.length() - min.length()] - '0') + carry;
and a monkey could understand your code!
Brilliant!
Post a Comment
Subscribe to Post Comments [Atom]
<< Home