一、基本题目含义
两个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;
}