百练oj2981 大整数加法

//ID:百练oj2981 大整数加法
//Name:Tanky_Woo
//网站:C++奋斗乐园|C++论坛|算法论坛|ACM/ICPC论坛
//地址:http://www.cppleyuan.com/
//个人主页:www.wutianqi.com
//豆瓣小组:http://www.douban.com/group/cppleyuan/
//QQ:493841534/17611904
//QQ群:C++奋斗乐园①群:19333724(满) ②群:23840480 ③群:17314377 ④群:23829384
//转载请写上本帖链接和“C++奋斗乐园|C++论坛|算法论坛|ACM/ICPC论坛”

总结:
思想:用字符串输入—》每个元素都减去’0’,用整型数组保存,然后两整型数组相加。中间记的在用整型数组保存时是倒序的。这样可以用于超出一位。
注意:对于0 0的特殊情况要考虑,且记得忽略前置无用的0。

 #define MAX_LEN 200
char szLine1[MAX_LEN+10];
char szLine2[MAX_LEN+10];
int an1[MAX_LEN+10];
int an2[MAX_LEN+10];
 
int main()
{
	scanf("%s", szLine1);
	scanf("%s", szLine2);
 
	int i, j;
	memset(an1, 0, sizeof(an1));
	memset(an2, 0, sizeof(an2));
 
	int nLen1 = strlen(szLine1);
	j = 0;
	for(i = nLen1-1; i >= 0; i--)
		an1[j++] = szLine1[i] - '0';
 
	int nLen2 = strlen(szLine2);
	j = 0;
	for(i = nLen2-1; i >= 0; i--)
		an2[j++] = szLine2[i] - '0';
 
	for(i = 0; i < MAX_LEN; i++)
	{
		an1[i] += an2[i];
		if(an1[i] >= 10)
		{
			an1[i] -= 10;
			an1[i+1]++;
		}
	}
 
	bool bStartOutput = false;
	if(strcmp(szLine1, "0") == 0 && strcmp(szLine2, "0") == 0)
		printf("0");
	else
	{
		for(i = MAX_LEN; i >= 0; i--)
		{
			if(bStartOutput)
				printf("%d", an1[i]);
			else if(an1[i])
			{
				printf("%d", an1[i]);
				bStartOutput = true;
			}
		}
	}
	putchar('\n');
	return 0;
}

发布者

Tanky Woo

Tanky Woo,[个人主页:https://tankywoo.com] / [新博客:https://blog.tankywoo.com]

《百练oj2981 大整数加法》有20个想法

发表评论

电子邮件地址不会被公开。 必填项已用*标注