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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值