比赛 NOIP2015普及组练习 评测结果 AAAAAAAAAA
题目名称 增强的加法问题 最终得分 100
用户昵称 sxysxy 运行时间 0.009 s
代码语言 C++ 内存使用 0.28 MiB
提交时间 2015-11-06 18:34:39
显示代码纯文本
#include <string>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <cmath>
#include <cstdio>
#include <cstdlib>
using namespace std;
#define MAXN (511)
char a[MAXN];
char b[MAXN];
char c[MAXN];
int la,lb;

void mov()
{
	int i,j,k;
	if(la < lb)
	{
		j = lb - la;
		for(k = lb-1; k >= j; k--)
		{
			a[k] = a[k-j];
			a[k-j] = 0;
		}
	}else if(la > lb)
	{
		j = la - lb;
		for(k = la-1; k >= j; k--)
		{
			b[k] = b[k-j];
			b[k-j] = 0;	
		}
	}
}

int main()
{
	freopen("add.in", "r", stdin);
	freopen("add.out", "w", stdout);
	int i,j;
	scanf("%s %s", a, b);
	la = strlen(a);
	lb = strlen(b);
	for(i = 0; i < la; i++)
		a[i] -= '0'; 			 //得到相应数字 
	for(j = 0; j < lb; j++)
		b[j] -= '0';	
	mov();         				//按位对齐 
	
	for(i = 1; i <= max(la,lb); i++)
		c[i] = a[i-1]+b[i-1];          //一路加过去,先不管进位 
									   //毕竟只是两个1位数相加,怎么也不会爆char 
	for(j = max(la,lb); j >= 1; j--)
	{					
		if(c[j] >= 10)					
		{									//这时再看进位 
			c[j-1] += c[j]/10;
			c[j] %= 10;
		}	
	}	
	
	int f = 1;
	for(i = 0; i <= max(la,lb); i++)
	{
		if(c[i] == 0 && f)continue;			//去掉开头多余的0 
		putchar(c[i]+'0');
		f = 0;
	}
	
	putchar('\n');
	return 0;
}