3992 - 火星加法

22 世纪,科学家发现,火星上有智慧的居民。火星人都非常喜欢数学。
每年,他们都要在火星上举行一次算术竞赛(ACM)。竞赛的内容是计算两个 100 位数字的和,该大奖的得主是使用时间最少的人。今年他们还请地球上的人参加竞赛。作为地球上唯一的代表,您被发送到火星上,以展示人类的力量。幸好你带上了你的笔记本电脑,它可以帮助你做得很快。
现在剩下的问题是,你只需编写一个简短的程序来计算两个给定的数字的总和。不过,在开始编写程序前,要记住,火星人使用的是二十进制的数字系统,因为他们通常有20 根手指。


题目输入

给你若干对火星数字,每个数字占一行。火星数字由0 9 ,以及从a j 的小写字母组成(小写字母a j 分别代表101119)。给定的数字的长度不会超过100 位。

题目输出

对于每对数字,在一行上输出它们的和。

输入/输出样例

题目输入

1234567890
abcdefghij
99999jjjjj
9999900001

题目输出

bdfi02467j
iiiij00000

C++解答

#include<iostream>
#include<algorithm>
using namespace std;
int main()
{ 
	string s,t;
	string Mars="0123456789abcdefghij";
	int i;
	while(cin>>s>>t)
	{
		int a[100]={0},b[100]={0},c[101]={0};
		int m=s.length();
		reverse(s.begin(),s.end());
		int n=s.length();
		reverse(t.begin(),t.end());
		for(i=0;i<m;i++)
		{
			if(s[i]>='a')
				a[i]=s[i]-'a'+10;
			else
				a[i]=s[i]-'0';
		}
		for(i=0;i<n;i++)
		{
			if(t[i]>='a')
				b[i]=t[i]-'a'+10;
			else
				b[i]=t[i]-'0';
		}
		int len=max(m,n);
		for(i=0;i<len;i++)
		{
			c[i+1]=(a[i]+b[i]+c[i])/20;
			c[i]=(a[i]+b[i]+c[i])%20;
		}
		if(c[i]==0) i--;
		for(;i>=0;i--)
		{
			cout<<Mars[c[i]];
		}
		cout<<endl;
	}
	return 0;
}
时间限制 1 秒
内存限制 128 MB
讨论 统计
上一题 下一题