| 比赛 | 
    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;
}