3493 - 二十进制

通过次数

0

提交次数

0

时间限制 : 1 秒 内存限制 : 128 MB

火星人喜欢使用二十进制,二十进制由0~9以及a~j组成(a代表10,j代表19)。现在给你2个二十进制数(不大于100位),输出他们的和,和也是二十进制表示。

题目输入

有多组测试数据,对于每一组测试数据,输入二行,每一行代表一个二十进制数。

题目输出

输出二个数的和。

输入/输出样例

输入格式

1234567890
abcdefghij
99999jjjjj
9999900001

输出格式

bdfi02467j
iiiij00000

C语言解答

#include<stdio.h>
#include<string.h>
void main()
{
	int j;
	unsigned short i;
	char ch[102],ch1[103],ch2[103];
	while(gets(ch)!=NULL)
	{
		for(i=0;i<103;i++)
			ch1[i]=ch2[i]='0';
		for(i=0;i<strlen(ch);i++)
		{
			ch1[i]=ch[strlen(ch)-1-i];
			if(ch1[i]>'9')ch1[i]=ch1[i]-'a'+'0'+10;
		}
		ch1[i]='\0';
		gets(ch);
		for(i=0;i<strlen(ch);i++)
		{
			ch2[i]=ch[strlen(ch)-1-i];
			if(ch2[i]>'9')ch2[i]=ch2[i]-'a'+'0'+10;
		}
		ch2[i]='\0';
		i=strlen(ch1)>strlen(ch2)?strlen(ch1):strlen(ch2);
		ch1[strlen(ch1)]='0';ch2[strlen(ch2)]='0';
		for(j=0;j<i;j++)
		{
			ch2[j]=ch2[j]+ch1[j]-'0';
			while(ch2[j]>'0'+19)
			{
				ch2[j+1]+=1;
				ch2[j]-=20;
			}
		}
		if(ch2[i]!='0')j=i;else j=i-1;
		for(j;j>=0;j--)
		{
			if(ch2[j]>'9')printf("%c",ch2[j]-'9'+'a'-1);
			else printf("%c",ch2[j]);
		}
		printf("\n");
	}
}

C++解答

#include <stdio.h>
#include <string.h>

char h[21] = "0123456789abcdefghij";
int w[200];

void init()
{
	for(int i = 0 ; i < 21 ; i ++)
		w[h[i]] = i;
}

int main()
{
	init();
	char a[200], b[200], c[200];
	while(scanf("%s%s",a,b) != EOF)
	{
		int lena = strlen(a) - 1;
		int lenb = strlen(b) - 1;
		int dig = 0, k = 0, i, j;
		for(i = lena, j = lenb ; i >= 0 && j >= 0 ; i --, j --)
		{
			c[k++] = h[(w[a[i]] + w[b[j]] + dig) % 20];
			dig = (w[a[i]] + w[b[j]] + dig) / 20;
		}

		while(i >= 0)
		{
			c[k++] = h[(w[a[i]] + dig) % 20];
			dig = (w[a[i]] + dig) / 20;
			i--;
		}

		while(j >= 0)
		{
			c[k++] = h[(w[b[j]] + dig) % 20];
			dig = (w[b[j]] + dig) / 20;
			j--;
		}

		if(dig != 0)
			c[k++] = h[dig];

		for(i = k - 1 ; i >= 0 ; i --)
			printf("%c",c[i]);
		printf("\n");
	}
	return 0;
}