题目描述
给定两个整数A和B,其表示形式是:从个位开始,每三位数用逗号","隔开。 现在请计算A+B的结果,并以正常形式输出。
输入描述:
输入包含多组数据数据,每组数据占一行,由两个整数A和B组成(-10^9 < A,B < 10^9)。
输出描述:
请计算A+B的结果,并以正常形式输出,每组数据占一行。
示例1
输入
复制
-234,567,890 123,456,789 1,234 2,345,678
输出
复制
-111111101 2346912
这种题有点麻烦,要分情况考虑。总的运算只有加法和减法两种,但是因为数可以有负号,所以又分为负数+正数(负数绝对值大或正数绝对值大),正数加正数,负数加负数。
#include <iostream>
#include <string.h>
using namespace std;
int res[102];
//加法,这里的运算都是不带负号的
void add(char *a,char *b){
int len1=strlen(a);
int len2=strlen(b);
int p=len1-1;
int q=len2-1;
int c=0;
int k=0;
while(p>=0&&q>=0){
if(a[p]==','){
p--;
}
if(b[q]==','){
q--;
}
int temp=(a[p]-48)+(b[q]-48)+c;
c=0;
if(temp>9){
res[k]=temp%10;
k++;
c=temp/10;
}
else{
res[k]=temp;
k++;
}
p--;
q--;
}
while(p>=0){
if(a[p]==','){
p--;
}
int temp=a[p]-48+c;
c=0;
if(temp>9){
res[k]=temp%10;
k++;
c=temp/10;
}
else{
res[k]=temp;
k++;
}
p--;
}
while(q>=0){
if(b[q]==','){
q--;
}
int temp=b[q]-48+c;
c=0;
if(temp>9){
res[k]=temp%10;
k++;
c=temp/10;
}
else{
res[k]=temp;
k++;
}
q--;
}
if(c!=0){
res[k]=c;
k++;
}
for(int i=k-1;i>=0;i--){
cout<<res[i];
}
cout<<endl;
}
//减法,大数在前,小数在后,都是不带负号的
void sub(char *a,char *b){
int len1=strlen(a);
int len2=strlen(b);
int p=len1-1;
int q=len2-1;
int numa[102];
int numb[102];
int k=0;
int r=0;
while(r<len1){
if(a[r]==','){
r++;
}
numa[k]=a[r]-48;
k++;
r++;
}
p=k-1;
k=0;
r=0;
while(r<len2){
if(b[r]==','){
r++;
}
numb[k]=b[r]-48;
k++;
r++;
}
q=k-1;
k=0;
while(p>=0&&q>=0){
if(numa[p]>=numb[q]){
res[k]=numa[p]-numb[q];
k++;
}
else{
if(numa[p-1]>0){
numa[p-1]-=1;
res[k]=numa[p]+10-numb[q];
k++;
}
else{
int pp=p-1;
while(numa[pp]==0){
numa[pp]+=9;
pp--;
}
numa[pp]--;
res[k]=numa[p]+10-numb[q];
k++;
}
}
p--;
q--;
}
while(p>=0){
res[k]=numa[p];
k++;
p--;
}
int temp=k-1;
while(res[temp]==0){
temp--;
}
for(int i=temp;i>=0;i--){
cout<<res[i];
}
cout<<endl;
}
//比较两个数绝对值大小,用以确定减法运算参数顺序
bool cmp(char *a,char *b){
int len1=strlen(a);
int len2=strlen(b);
if(len1>len2){
return true;
}
else if(len1<len2){
return false;
}
else{
if(strcmp(a,b)>=0)return true;
else{
return false;
}
}
}
int main(){
char a[102];
char b[102];
while(cin>>a>>b){
if(a[0]!='-'&&b[0]!='-'){
add(a,b);
}
else if(a[0]=='-'&&b[0]!='-'){
if(cmp(a+1,b)){
cout<<"-";
sub(a+1,b);
}
else{
sub(b,a+1);
}
}
else if(a[0]!='-'&&b[0]=='-'){
if(cmp(b+1,a)){
cout<<"-";
sub(b+1,a);
}
else{
sub(a,b+1);
}
}
else{
cout<<"-";
add(a+1,b+1);
}
}
return 0;
}