洛谷p1604 B进制星球 普及- 数论,进制,字符串

#include<iostream>
#include<vector>
using namespace std;
int main()
{
    char table[36];
    string s1,s2,ans="";
    int k;
    cin>>k>>s1>>s2;
    for(int i=0;i<10;i++)//打表,数字的每一位
    {
        table[i]='0'+i;
    }
    for(int i=10;i<36;i++)
    {
        table[i]='A'+(i-10);
    }
    int len=max(s1.length(),s2.length());//补零,使两字符串长度相同,便于处理
    while(s1.length()<len)
    {
        s1='0'+s1;
    }
    while(s2.length()<len)
    {
        s2='0'+s2;
    }
    while(ans.length()<len)//预处理
    {
        ans='0'+ans;
    }
  //  cout<<ans<<endl;
    int n1,n2,sum=0;
    char c1,c2,c;
    for(int i=len-1;i>=0;i--)//对于各位
    {
        c1=s1[i];
        c2=s2[i];
        for(int j=0;j<36;j++)//转化为十进制下的数字
        {
            if(c1==table[j])
            {
                n1=j;
                break;
            }
        }
        for(int j=0;j<36;j++)
        {
            if(c2==table[j])
            {
                n2=j;
                break;
            }
        }
      //  cout<<n1<<" "<<n2<<endl;
        sum=sum+n1+n2;//求和
        for(int j=0;j<36;j++)//转化为k进制下的字符
        {
            if(sum%k==j)
            {
                c=table[j];
                break;
            }
        }
        ans[i]=c;
        if(sum>=k)//处理进位
        {
            sum=sum/k;
        }
        else
        {
            sum=0;
        }
    }
    if(sum!=0)//最顶进位
    {
        for(int j=0;j<36;j++)
        {
            if(sum%k==j)
            {
                c=table[j];
                break;
            }
        }
        ans=c+ans;
    }
   // cout<<s1<<endl;
    //cout<<s2<<endl;
    cout<<ans<<endl;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值