此题难度在于两数的正负未知,如果符号相同,利用栈就可以实现相加。
关键在于两长短,符号都未知,如果一正一负,利用栈做减法时先要判断两者绝对值大小,再判断最后结果的正负,略微有些复杂。
对于类似与A+B的题,如果数相加后的的范围未超过了long long(1开头的19位数),直接将改数转换为long long 后相加减。
如果超过了long long ,就需要按位自己设计加减。
在将字符串转为整型的时候,用pow效果不太理想,这个最好的方式是累乘,也就是这段代码里的方法。
代码:
#include <iostream>
#include <sstream>
#include <stack>
#include <string>
#include <algorithm>
#include <cmath>
using namespace std;
int main()
{
int i;
string a,b;
while(cin>>a>>b)
{
long long num_a=0,num_b=0;
for(i=0;i<a.size();i++)
{
if(a[i]>='0' && a[i]<='9' )
{
num_a = num_a*10 + a[i] - '0';
}
}
if(a[0] == '-')
num_a *= -1;
for(i=0;i<=b.size();i++)
{
if(b[i]>='0' && b[i]<='9' )
{
num_b = num_b*10 + b[i]-'0';
}
}
if(b[0] == '-')
num_b *= -1;
cout<<num_a + num_b<<endl;
}
return 0;
}