加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

hpu1306 大数a+b和a-b

发布时间:2020-12-14 03:14:57 所属栏目:大数据 来源:网络整理
导读:题目描述 给你两个数a和b,让你计算a和b的和或者差。 输入 有t组数据,每组数据输入一个正数a,接着输入一个符号('+'或者'-'),再输入一个正数b。 a和b的位数都小于100位。 输出 若是'+',输出两个数之和,若是'-',输出两数之差。 样例输入 412345 + 123451


题目描述

给你两个数a和b,让你计算a和b的和或者差。

输入

有t组数据,每组数据输入一个正数a,接着输入一个符号('+'或者'-'),再输入一个正数b。

a和b的位数都小于100位。

输出

若是'+',输出两个数之和,若是'-',输出两数之差。

样例输入

4
12345 + 12345
12345 + 35
2345 - 12345
12 - 123

样例输出

24690
12380
-10000
-111

提示

注意:a和b很大,用int或者long long无法存储。

博文不足,模拟个水题练练代码;

#include<cstdio>
#include<cstring>
#include<cmath>
#include<iostream>
#include<algorithm>
#define max_n 1010
using namespace std;

char str1[max_n],str2[max_n];
int a[max_n],b[max_n],str3[max_n],str4[max_n];

int main()
{
	int t;
	char ch;
	scanf("%d",&t);
	getchar();
	while(t--)
	{
		memset(a,sizeof(a));
		memset(b,sizeof(b));
		memset(str3,sizeof(str3));
		memset(str4,sizeof(str4));
		scanf("%s %c %s",str1,&ch,str2);
		int len1=strlen(str1);
		int len2=strlen(str2);
		for(int i=0;i<len1;i++)
			str3[i]=str1[len1-i-1]-'0';
		for(int i=0;i<len2;i++)
			str4[i]=str2[len2-i-1]-'0';
		if(ch=='+')
		{
			int len=max(len1,len2);
			for(int i=0;i<max(len1,len2);i++)
			{
				a[i]+=str3[i]+str4[i];
				if(a[i]>=10 && i!=max(len1,len2)-1)
				{
					a[i]%=10;
					a[i+1]=1;
				}
				if(i==max(len1,len2)-1 && a[i]>=10)
				{
					a[i]%=10;
					a[len]=1;
					len++;
				}
			}
			for(int i=len-1;i>=0;i--)
				printf("%d",a[i]);
		}
		else
		{
			if(!strcmp(str1,str2))
			{
				printf("0n");
				continue;
			}
			if(len1<len2 || (len1==len2 && strcmp(str1,str2)<0))
			{
				for(int i=0;i<len2;i++)
				{
					a[i]+=str4[i]-str3[i];
					if(a[i]<0)
					{
						a[i+1]=-1;
						a[i]+=10;
					}
				}
				bool flag=false;
				printf("-");
				for(int i=len2-1;i>=0;i--)
				{
					if(a[i]!=0)
						flag=true;
					if(flag)
						printf("%d",a[i]);
				}
			}
			else
			{
				for(int i=0;i<len1;i++)
				{
					a[i]+=str3[i]-str4[i];
					if(a[i]<0)
					{
						a[i+1]=-1;
						a[i]+=10;
					}
				}
				bool flag=false;
				for(int i=len1-1;i>=0;i--)
				{
					if(a[i]!=0)
						flag=true;
					if(flag)
						printf("%d",a[i]);
				}
			}
		}
		printf("n");
	}
	return 0;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读