【题目】
Problem E: 喜闻乐见的a+b
Time Limit: 1 Sec Memory Limit: 128 MB
Submit: 363 Solved: 135
[Submit][Status][Web Board]
Description
喜闻乐见的a+b来了,当然二进制,八进制,十进制什么的估计你们也懒得写了,来个20进制的a+b
Input
给出多组a和b,每个数字一行
数字由0~9和小写字母a~j(10~19)
给出的长度不超过100
Output
每组数据输出a+b的和。
Sample Input
1234567890 abcdefghij 99999jjjjj 9999900001
Sample Output
bdfi02467j iiiij00000
【题解】
20进制的a+b
【代码】
#include <bits/stdc++.h>
using namespace std;
#define N 20 //N进制
stack <char> stk;
int c,add;
int cul(char *a,int i)
{
return (a[i]>'9')? a[i]-'a'+10 : a[i]-'0'; //返回a[i]的值
}
void check()
{
c>=N? (c-=N,add=1) : add=0; //判断是否进位
c<10? stk.push('0'+c) : stk.push(c-10+'a');
}
int main()
{
char a[105],b[105];
while( ~scanf("%s%s",a,b) )
{
while( !stk.empty() ) //栈的初始化
stk.pop();
int l1=strlen(a), l2=strlen(b);
int i,j;
add=0;
for(i=l1-1,j=l2-1; i>=0&&j>=0; i--,j--) //a+b
{
c = add+cul(a,i)+cul(b,j);
check();
}
while(i>=0)
{
c = add+cul(a,i);
check();
i--;
}
while(j>=0)
{
c = add+cul(b,j);
check();
j--;
}
if(add) //判断最高位是否进位
stk.push('1');
while( !stk.empty() )
{
printf( "%c",stk.top() );
stk.pop();
}
printf("\n");
}
return 0;
}