题目描述
给定两个整数A和B,其表示形式是:从个位开始,每三位数用逗号","隔开。 现在请计算A+B的结果,并以正常形式输出。
输入样例
输入:
-234,567,890 123,456,789
1,234 2,345,678
输出:
-111111101
2346912
实现代码
#include <iostream>
#include<string>
#include<vector>
#include<cctype>
#include<algorithm>
using namespace std;
//两个一正一负的字符串数字比较哪个绝对值更大
int mycompare(string a,string b)
{
string aa="",bb="";
int i=0;
if(a[0]=='-')
i=1;
for(; i<a.size(); i++)
{
if(a[i]!=',')
aa=aa+a[i];
}
if(b[0]=='-')
i=1;
else
{
i=0;
}
for(; i<b.size(); i++)
{
if(b[i]!=',')
bb=bb+b[i];
}
//cout<<"a的数字长度为:"<<aa.size()<<endl;
//cout<<"b的数字长度为:"<<bb.size()<<endl;
if(aa.size()>bb.size())
return 1;
else if(aa.size()<bb.size())
return 0;
else
{
if(aa>bb)
return 1;
else{
return 0;
}
}
}
int IsNagetive(string a)
{
if(a[0]=='-')
return 1;
else
{
return 0;
}
}
int main()
{
string a,b;
int l1,l2;
while(cin>>a>>b)
{
// cout<<"a的值为:"<<a<<endl;
//cout<<"b的值为:"<<b<<endl;
l1=a.size();
l2=b.size();
int *p1=new int[max(l1,l2)]();
int *p2=new int[max(l1,l2)]();
int *re=new int[max(l1,l2)+1]();
int flag=0;//表示进位或者借位的情况
int k=0;
int positive=1;//用来判断结果的正负号
//将字符串用int类型的数组表示
for(int i=l1-1; i>=IsNagetive(a); i--)
{
if(a[i]!=',')
{
p1[k++] =a[i]-'0';
}
}
k=0;
for(int i=l2-1; i>=IsNagetive(b); i--)
{
if(b[i]!=',')
{
p2[k++] =b[i]-'0';
}
}
//两个大正数相加
if((a[0]!='-'&&b[0]!='-')||(a[0]=='-'&&b[0]=='-'))
{
k=0;
for(int i=0; i<max(l1,l2); i++)
{
if(p1[i]+p2[i]+flag>=10)
{
re[k++] =p1[i]+p2[i]+flag-10;
flag=1;
}
else
{
re[k++] =p1[i]+p2[i]+flag;
flag=0;
}
}
if(flag==1)
{
re[k]=1;
}
if(IsNagetive(a)==1)
{
positive=0;
}
}
else //处理一正一负的情况
{
k=0;
// cout<<"b[0]的值为:"<<endl;
if(a[0]=='-')
{
if(mycompare(a,b)==1) //此时a的绝对值大于b,则结果为负,将p1,p2进行交换,p2为绝对值大的那个
{
// cout<<"此时a的绝对值大于b的绝对值,且a为负,结果为负"<<endl;
swap(p1,p2);
positive=0;
}
}
else
{
if(mycompare(a,b)==0) //此时a为正数,b为负数,b的绝对值大于a的绝对值,结果为负
{
// cout<<"此时a的绝对值小于b的绝对值,且b为负,结果为负"<<endl;
positive=0;
}
else
{
// cout<<"此时a的绝对值大于b的绝对值,且b为负,结果为正"<<endl;
swap(p1,p2);
}
}
for(int i=0; i<max(l1,l2); i++)
{
if(p2[i]-p1[i]-flag<0)
{
re[k++]=p2[i]-p1[i]-flag+10;
flag=1;
}
else
{
re[k++]=p2[i]-p1[i]-flag;
flag=0;
}
}
}
while(re[k]==0)
k--;
if(positive==0)
cout<<"-";
for(int i=k; i>=0; i--)
{
cout<<re[i];
}
cout<<endl;
}
return 0;
}