大整数加法 open judge -2981

描述

求两个不超过200位的非负整数的和。

输入有两行,每行是一个不超过200位的非负整数,可能有多余的前导0。输出一行,即相加后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。样例输入
22222222222222222222
33333333333333333333
样例输出
55555555555555555555

本道题的主要难点在于进位操作。   菜鸟的我也是一脸懵逼,但抱怨是没用的还得看啊。

AC代码:

#include<iostream>
#include<string.h>
#include<cstring>
using namespace std;
struct bigdata
{
public:
	char num1[250];
	int num[250];
	int cnt;
	void set()
	{
			cnt=strlen(num1);
		for (int i=cnt-1,k=0;i>=0;i--)
			num[k++]=num1[i]-'0';
	}
	void show()
	{
		for (int i=cnt-1;i>=0;i--)
			cout<<num[i];
	}
};
bigdata a,b,c;
bigdata add(bigdata a,bigdata b)
{
	int i,j,g,x,k=0;
	bigdata h;
	for (i=0,j=0,g=0;;i++,j++)
	{
		x=g;
		if (i>=a.cnt&&j>=b.cnt&&g==0)
			break;
		if (i<a.cnt)
			x=x+(a.num[i]);
		if (j<b.cnt)
			x=x+(b.num[j]);
	     h.num[k++]=x%10;
		 g=x/10;
	}
	k--;
	while(k>=0&&!h.num[k])
		k--;
		h.cnt=k+1;
	return h;
}
int main()
{
	cin>>a.num1>>b.num1;
	if (a.num1[0]=='0'&&b.num1[0]=='0')
	{
		cout<<0;
		return 0;
	}
	a.set();
	b.set();
	c=add(a,b);
	c.show();
	return 0;
}

第一次写解题报告,唉还是很垃圾的。勉强AC了。

提示一下如果有人找不出自己哪里出的错误可以试一下这几个测试数据:0+0=0,00000+00000=0;1234+0000000=1234;

可能问题还是出在前缀0不输出上。  希望有点用吧。

阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭