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

hdu 1002 A + B Problem II(大数模拟加法)

发布时间:2020-12-14 02:34:46 所属栏目:大数据 来源:网络整理
导读:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1002 题目要求:输入t 为测试组数,然后输入两个正数 a,b求和; 【思路】 首先,用字符串读入a,b,再将a,b 逆序存到数组中,然后对应位相加就行了,长度小的数要注意补零 倒过来做可以让进位变得方

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1002

题目要求:输入t 为测试组数,然后输入两个正数 a,b求和;

【思路】

首先,用字符串读入a,b,再将a,b 逆序存到数组中,然后对应位相加就行了,长度小的数要注意补零

倒过来做可以让进位变得方便,如果对应位的和大于等于10,就把余数储存在当前位置,后一位加1;


【代码】

#include <iostream>
#include <string>
#include <cstring>
#include <cstdio>
using namespace std;
int main()
{
	int n,cas=1;
	cin>>n;
	int s1[1111];int s2[1111];
        char a[1111];char b[1111];
	while(n--)
	{
		memset(s1,sizeof(s1));
		memset(s2,sizeof(s2));
		memset(a,sizeof(a));
		memset(b,sizeof(b));
		cin>>a>>b;
		if(cas!=1)
			cout<<"n";
		cout<<"Case "<<cas<<":"<<endl;
		cout<<a<<" "<<"+"<<" "<<b<<" "<<"="<<" ";
		int lena=strlen(a);
		int lenb=strlen(b);
		char *max=0;  //放到一块定义 char *max,*min  //复习一下指针
		char *min=0;
		int maxl,maxs;
		if(lena>=lenb)
			{ max=a; min=b; maxl=lena; maxs=lenb;}  //用max指针指向长度较大的数 min指向长度较小的数;
		else
			{ max=b; min=a; maxl=lenb; maxs=lena;}
	
			for(int i=0;i<maxl;i++)
			{
				s1[i]= max[maxl-i-1]-48;//逆序存到数组
			}
			int k=0;
			for(int i=0;i<maxl;i++)
			{
				if(i<maxs)
					s2[i]=(min[maxs-i-1]-48);
				else
					s2[i]=0;//后面补零
			}
		int tt;
		for( tt=0;tt<maxl;tt++)
		{
			int ans=s1[tt]+s2[tt];
			if(ans>=10)
			{
				s1[tt]=ans%10;
				s1[tt+1]+=1;
			}
			else
				s1[tt]=ans;
		}
		if(s1[maxl]!=0)//如果和超过maxl,maxl+1;
			maxl+=1;
		for(int i=maxl-1;i>=0;i--)
			cout<<s1[i];
		cout<<endl;
	
		cas++;
	}
	return 0;
}

(编辑:李大同)

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

    推荐文章
      热点阅读