问题 B: A+B【算法笔记:codeup墓地】

题目描述

给定两个整数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
#include
#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(*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]=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]);
	}
}

 

你可能感兴趣的:(算法笔记,非常规数据加减法)