B - “简单”的A+B HDU - 1002

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/liujie2232692543/article/details/89061876

现给出两个非负整数A和B,求A+B

Input

第一行给出一个数字T (1<=T<=20),代表接下来有T组测试样例
接下来每一组测试样例由一行组成,一行内将给出两个整数A和B。
A和B的长度小于等于1000 

Output

对于每一组测试样例,你应该输出两行。
第一行输出"Case #:"。#的意思是当前是第几个测试样例的数字。
第二行输出"A + B = SUM",A、B是原输入当中的数据,SUM是A+B运算结果,但是存在前导零的输出结果将不被认可
每两组测试样例之间留一个空行。 

Sample Input

2
1 2
112233445566778899 998877665544332211

Sample Output

Case 1:
1 + 2 = 3

Case 2:
112233445566778899 + 998877665544332211 = 1111111111111111110

我的代码:

#include <stdio.h>
#include <string.h>
#include <algorithm>
#include <iostream>

using namespace std;
	char a[10005];
	char b[10005];
	char c[10005];
	char f4[10005];
	char g[10005];
	char zx[10005];
	char cv[10005];
	char df[10005];
	char df2[1005];
int main()
{
//	freopen("data.txt","r",stdin);
//	freopen("my_out.txt","w",stdout);
	int n;
	while(scanf("%d",&n)!=EOF)
	{
		int u=1;
//		memset(c,0,sizeof(c));
//		memset(a,0,sizeof(a));
//		memset(b,0,sizeof(b));
//		memset(f4,0,sizeof(f4));
//		memset(g,0,sizeof(g));
//		memset(zx,0,sizeof(zx));
//		memset(cv,0,sizeof(cv));
//		memset(df,0,sizeof(df));
		for(int m=0;m<n;m++)
		{	
				memset(c,0,sizeof(c));
		memset(a,0,sizeof(a));
		memset(b,0,sizeof(b));
		memset(f4,0,sizeof(f4));
		memset(g,0,sizeof(g));
		memset(zx,0,sizeof(zx));
		memset(cv,0,sizeof(cv));
		memset(df,0,sizeof(df));
		memset(df2,0,sizeof(df2));
			scanf("%s",a);getchar();
			scanf("%s",b);getchar();
			int len1 = strlen(a);
			int len2 = strlen(b);		
			int	zx1=0;
			for(int i=0;i<len1;i++)
			{
				zx[zx1++] = a[i];
			}
			int cv1=0;
			for(int i=0;i<len2;i++)
			{
				cv[cv1++] = b[i];
			}		
//			char f1=0;	
//			char g1=0;		
//			int ok=0;
//			for(int i=0;i<len1;i++)
//			{
//				if(a[i] != '0'||ok==3)
//				{
//					ok=3;
//					f4[f1++] = a[i];
//				}
//				else if(ok==0||ok==1)
//				{
//					ok=1;
//				}
//			}
//			int ok2=0;
//			for(int i=0;i<len2;i++)
//			{
//				if(b[i]!='0'||ok2==3)
//				{
//					ok2=3;
//					g[g1++] = b[i];
//				}
//				else if(ok2==0||ok2==1)
//				{
//					ok2=1;
//				}
//			}
	//		printf("f4=%s g=%s\n",f4,g);
//			int v=0,z=0;
//			for(int i=0;i<len1;i++)
//			{
//				a[v++] = f4[i];
//			}
//			for(int i=0;i<len2;i++)
//			{
//				b[z++] = g[i];
//			}
		//	printf("a=%s b=%s\n",a,b);
//			len1 = strlen(a);
//			len2 = strlen(b);
				int f=0;
				int p=0;
				int h8=0;								
				if(len1 > len2)
				{
					int mk = len1-len2;
				//	printf("mk = %d\n",mk);
					int df1=0;
					for(int i=0;i<mk;i++)
					{
						df[df1++] = '0';
					}
					df[df1]='\0';
	//				for(int i=0;i<df1;i++)
	//				{
	//					printf("%c",df[i]);
	//				}
	//				printf("\n");
	//				string df6;
	//				df6 = df;
	//			cout << df6 << endl;
	//				printf("df=%s\n",df);		
					
			//		printf("b=%s\n",b);
					strcat(df,b);
			//			printf("df=%s\n",df);
			//		printf("a=%s\n",a);
					strcpy(b,df);
			//			printf("b=%s\n",b);
											
					for(int i=len1-1;i>=0;i--)
					{
						int k=0;
						if(i == 0)
						{
							if(a[i]-'0' + b[i]-'0'+p >= 10)
							{
								k = (a[i]-'0'+b[i]-'0'+p)%10;
									p = (a[i]-'0'+b[i]-'0'+p)/10;
								c[f++] = k+'0';
								c[f++] = p+'0';
							}
							else
							{
								k = a[i]-'0'+b[i]-'0'+p;
								c[f++] = k+'0';
								p=0;
							}
							
						}
						else
						{
							if(a[i]-'0' + b[i]-'0'+ p >= 10)
							{		
								k = (a[i]-'0'+b[i]-'0'+p)%10;
								c[f++] = k+'0';
							}
							else
							{
								k = a[i]-'0'+b[i]-'0'+p;
								c[f++] = k+'0';
							}
							p = (a[i]-'0'+b[i]-'0'+p)/10;
						}				
					}					
				}
			
				else if(len1 < len2)
				{	
				//	p=0;		
					int mk2 = len2-len1;
					int df3=0;
					for(int i=0;i<mk2;i++)
					{
						df2[df3++] = '0';
					}
					df2[df3]='\0';
					strcat(df2,a);
					strcpy(a,df2);
	//					printf("a=%s\n",a);
	//					printf("b=%s\n",b);				
					for(int i=len2-1;i>=0;i--)
					{
						int k=0;
						if(i == 0)
						{
							if(a[i]-'0' + b[i]-'0'+p >= 10)
							{
								k = (a[i]-'0'+b[i]-'0'+p)%10;
									p = (a[i]-'0'+b[i]-'0'+p)/10;
								c[f++] = k+'0';
								c[f++] = p+'0';
							}
							else
							{
								k = a[i]-'0'+b[i]-'0'+p;
								c[f++] = k+'0';	p=0;
							}
							
						}
						else if(i!=0)
						{	
							if(a[i]-'0' + b[i]-'0'+ p >= 10)
							{		
								k = (a[i]-'0'+b[i]-'0'+p)%10;
								c[f++] = k+'0';
							}
							else
							{
								k = a[i]-'0'+b[i]-'0'+p;
								c[f++] = k+'0';
							}
							p = (a[i]-'0'+b[i]-'0'+p)/10;
						}				
					}						
				}		
				else
				{
				//	p=0;
					for(int i=len2-1;i>=0;i--)
					{
						int k=0;
						if(i == 0)
						{
							if(a[i]-'0' + b[i]-'0'+p >= 10)
							{
					//			printf("|||||\n");
							//	printf("p=%d\n",p);
						//		printf("a[i]=%c\n",a[i]);
						//		printf("b[i]=%c\n",b[i]);
								k = (a[i]-'0'+b[i]-'0'+p)%10;
						//				printf("k=%d\n",k);
								p = (a[i]-'0'+b[i]-'0'+p)/10;
						//			printf("p=%d\n",p);							
								c[f++] = k+'0';
								c[f++] = p+'0';
							}
							else
							{
								k = a[i]-'0'+b[i]-'0'+p;
								c[f++] = k+'0';	p=0;
							}								
						}
						else
						{
							if(a[i]-'0' + b[i]-'0'+ p >= 10)
							{		
								k = (a[i]-'0'+b[i]-'0'+p)%10;
								c[f++] = k+'0';	
							}
							else
							{
								k = a[i]-'0'+b[i]-'0'+p;
								c[f++] = k+'0';	
							}
							p = (a[i]-'0'+b[i]-'0'+p)/10;
						}			
					}		
				}
			printf("Case %d:\n",u++);
			strrev(c);
			if(len1==0&&len2!=0)
			{
				printf("%s + %s = %s\n",zx,cv,b);
			}
			else if(len2==0&&len1!=0)
			{
				printf("%s + %s = %s\n",zx,cv,a);
			}
			else if(len1!=0&&len2!=0)
				printf("%s + %s = %s\n",zx,cv,c);
			else if(len1 == 0&&len2==0)
				printf("%s + %s = 0\n",zx,cv);
			if(m!=n-1)
				printf("\n");
		}
	}
//	fclose(stdin);
//	fclose(stdout);
	return 0;
}

简单写法:

#include <iostream>
#include <cstring>
#include <algorithm>

using namespace std;

char a[1005],b[1005];
int f[1005];
int main()
{
//	freopen("data.txt","r",stdin);
//	freopen("ac_out.txt","w",stdout);
	int n;
	while(cin >> n)
	{
		int p = 0;
		for(int k=0;k<n;k++)
		{
			cin >> a >> b;
			memset(f,0,sizeof(f));
			int ll1 = strlen(a);
			int ll2 = strlen(b);
			int l1 = ll1-1;
			int l2 = ll2-1;
			int t=0;
			while(l1>=0&&l2>=0)
			{
				int x = f[t]+(a[l1]-'0' + b[l2]-'0');
				f[t+1]+=x/10;
				f[t] = x%10;
				t++;l1--;l2--;
			}
			while(l1>=0)
			{
				int x = f[t]+(a[l1]-'0');
				f[t+1]+=x/10;
				f[t]=x%10;
				t++;
				l1--;
			}
			while(l2>=0)
			{
				int x=f[t]+(b[l2]-'0');
				f[t+1]+=x/10;
				f[t]=x%10;
				t++;
				l2--;
			}
			if(f[t]==0)
			t--;
			cout <<"Case "<<++p<<":"<<endl;
			cout <<a<<" + "<<b<<" = ";
			for(int i=t;i>=0;i--)
			cout<<f[i];
			cout << endl;
			if(k!=n-1)
			cout << endl;
		}
//		fclose(stdin);
//		fclose(stdout);
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/liujie2232692543/article/details/89061876