任意长度加法的实现,没有考虑负数的情况。
#include <iostream>
#include <stack>
#include <string>
using namespace std;
int inline cti(char c)
{
return (c - '0');
}
int main()
{
string a,b,max,min;
int i, len ,cr ,tmp;
stack<int> si;
while(cin >> a >> b)
{
max = a.length() > b.length() ? a : b ;
min = a.length() > b.length() ? b : a ;
len = max.length() - min.length() ;
cr = 0;
for( i = min.length() - 1 ; i >= 0 ; i --) {
tmp = cr + cti(min[i]) + cti(max[len + i]);
cr = tmp / 10 ;
si.push(tmp % 10);
}
for(i = len - 1 ; i >= 0 ; i --) {
tmp = cr + cti(max[i]);
cr = tmp /10;
si.push(tmp % 10);
}
while(cr) {
si.push(cr % 10);
cr /= 10;
}
while(!si.empty()) {
cout << si.top() ;
si.pop();
}
cout << endl;
}
}
#include <stack>
#include <string>
using namespace std;
int inline cti(char c)
{
return (c - '0');
}
int main()
{
string a,b,max,min;
int i, len ,cr ,tmp;
stack<int> si;
while(cin >> a >> b)
{
max = a.length() > b.length() ? a : b ;
min = a.length() > b.length() ? b : a ;
len = max.length() - min.length() ;
cr = 0;
for( i = min.length() - 1 ; i >= 0 ; i --) {
tmp = cr + cti(min[i]) + cti(max[len + i]);
cr = tmp / 10 ;
si.push(tmp % 10);
}
for(i = len - 1 ; i >= 0 ; i --) {
tmp = cr + cti(max[i]);
cr = tmp /10;
si.push(tmp % 10);
}
while(cr) {
si.push(cr % 10);
cr /= 10;
}
while(!si.empty()) {
cout << si.top() ;
si.pop();
}
cout << endl;
}
}