两个K(2<=k<=10)进制的数相加

一、基本题目含义

两个K进制的数相加https://ac.nowcoder.com/acm/contest/23481

二、基本思路

1.由于a,b两个数字的长度都在1-200000之间的,所以int ,long long 都是存不下的,直接用字符串存。

2.加法是从最低位开始的,所以先要把a,b字符串都倒置再相加

3.直接上代码

#include<bits/stdc++.h>
using namespace std;
int main()
{
    ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
    int k;cin>>k;
    //由于a,b的数字很大,用字符串储存
    string a;cin>>a;
    string b;cin>>b;
    
    //将每个字符转换成对应的数字,a存在A中,b存在B中,注意是倒序存储的
    vector<int>A;vector<int>B;
    int t=0;//用来表示进位的数

    //用来保存A和B的和
    vector<int>res;

    //倒叙储存A
    for(int i=a.size()-1;i>=0;--i){
        A.push_back(a[i]-'0');
    }

    //倒叙储存B
    for(int i=b.size()-1;i>=0;--i){
        B.push_back(b[i]-'0');
    }
    
    for(int i=0;i<A.size()||i<B.size();++i)
    {
        //t表示上一位的进位,初始值为0
        //当小于A.size()的时候加上这一位的数
        if(i<A.size()) t+=A[i];

        //当小于B.size()的时候加上这一位的数
        if(i<B.size()) t+=B[i];

        res.push_back(t%k);
        t=t/k;
        
    }
    //如果最后相加数的还有进位,就放进去
    if(t) res.push_back(t);
    //把数字恢复以前的顺序
    for(int i=res.size()-1;i>=0;--i){
        cout<<res[i];
    }
    cout<<endl;
    return 0;
}

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值