zcmu Problem E: 喜闻乐见的a+b

【题目】

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

猜你喜欢

转载自blog.csdn.net/qq_41117236/article/details/81148251