题目描述
给定两个整数A和B,其表示形式是:从个位开始,每三位数用逗号","隔开。
现在请计算A+B的结果,并以正常形式输出。
输入
输入包含多组数据数据,每组数据占一行,由两个整数A和B组成(-10^9 < A,B < 10^9)。
输出
请计算A+B的结果,并以正常形式输出,每组数据占一行。
样例输入
-234,567,890 123,456,789 1,234 2,345,678
样例输出
-111111101 2346912
#include<stdio.h>
#include<string.h>
#define MAX 50
char STR[MAX][MAX];
void read(char str[],int a[],int *ai,int b[],int *bi);//读取一行字符,并将其转化为数字存放到a,b当中
void add(int a[],int *ai,int b[],int *bi,int c[],int *ci);
void print(int c[],int ci);
int main()
{
char str[MAX];
gets(str);
int n=0;
while(str[0]!='\0')
{
strcpy(STR[n],str);
n++;
gets(str);
}
for(int i=0;i<n;i++)
{
int a[MAX]={0},b[MAX]={0},c[MAX]={0};
int ai=0,bi=0,ci=0;//记录a,b的长度
read(STR[i],a,&ai,b,&bi);
add(a,&ai,b,&bi,c,&ci);
print(c,ci);
printf("\n");
}
return 0;
}
void read(char str[],int a[],int *ai,int b[],int *bi)
{
int i=0;
int *p,*pos;
p=a;//记录数组
pos=ai;//记录下标
while(str[i]!='\0')
{
if(str[i]==',')
{
i++;
continue;
}
else if(str[i]==' ')
{
p=b;
pos=bi;
i++;
continue;
}
else
{
if(str[i]=='-')
{
p[MAX-1]=-1; //最后一位标记符号
}
else
{
*(p+(*pos))=str[i]-'0';
(*pos)++;
}
}
i++;
}
}
void add(int a[],int *ai,int b[],int *bi,int c[],int *ci)
{
int enter=0;
int start=(*ai)>(*bi)? (*ai-1):(*bi-1);
//将a,b从低位对齐
if(*ai>*bi)
{
for(int i=*bi-1;i>=0;i--)
{
b[i+(*ai)-(*bi)]=b[i];
}
for(int i=0;i<(*ai)-(*bi);i++)
{
b[i]=0;
}
}
else if(*ai<*bi)
{
for(int i=*ai-1;i>=0;i--)
{
a[i+(*bi)-(*ai)]=a[i];
}
for(int i=0;i<(*bi)-(*ai);i++)
{
a[i]=0;
}
}
if((a[MAX-1]==-1&&b[MAX-1]==-1)||(a[MAX-1]!=-1&&b[MAX-1]!=-1))//同符号相加
{
if(a[MAX-1]==-1)
c[MAX-1]=-1;
while(start>=0)
{
c[*ci]=(a[start]+b[start]+enter)%10;
enter=(a[start]+b[start]+enter)/10;
start--;
(*ci)++;
}
}
else//异号相加
{
//判断绝对值大小
int flag=0;//0代表a的绝对值大,1代表b的绝对值大,2代表相等
int i;
for(i=0;i<=start;i++)
{
if(b[i]>a[i])
{
flag=1;
break;
}
else if(b[i]<a[i])
{
flag=0;
break;
}
}
if(i==start+1&&flag==0)
{
flag=2;
}
if((a[MAX-1]==-1&&flag==0)||(b[MAX-1]==-1&&flag==1))
{
c[MAX-1]=-1;
}
//计算c的绝对值
if(flag==0)
{
while(start>=0)
{
if(a[start]>=b[start])
{
c[*ci]=a[start]-b[start];
}
else
{
c[*ci]=a[start]+10-b[start];
a[start-1]--;
}
(*ci)++;
start--;
}
}
else if(flag==1)
{
while(start>=0)
{
if(b[start]>=a[start])
{
c[*ci]=b[start]-a[start];
}
else
{
c[*ci]=b[start]+10-a[start];
b[start-1]--;
}
(*ci)++;
start--;
}
}
}
}
void print(int c[],int ci)
{
if(c[MAX-1]==-1)
{
printf("-");
}
for(int i=ci-1;i>=0;i--)
{
printf("%d",c[i]);
}
}