题解bys00000b 这是一个类似于高精度的算法题,我们可以像竖式一样对其进行加法
我们可以想到,小学时学过的转换进制的办法,我们可以真么做,但是本蒟蒻感觉有可能会超时(要转化两次)
1.我们预处理一个保存N进制字符的数组,然后我们直接从中查询来吧N进制数转化为10进制数,或者吧10进制数转化为N进制数
2.对其 a 和 b,方便我们按位来对其加法。然后我们考虑到 可能会进位,所以我们在前面多加一个 0。
3.然后我们按位对其进行加法,我们可以定义一个新的数组,或直接用 a,数组的值来覆盖。
c[lc]+a[lc]+b[lc]+x; x=c[lc]/10; c[lc]%=10; lc++;
然后我们就可以写出代码了
#include <bits/stdc++.h>
using namespace std;
int main()
{
string a,b,w;
int x[100],y[100],i,k,N;
cin>>N;
for(i=0;i<=N-1;i++)
{
if(i<10)
w=w+char(48+i); //对要用到的数字进行处理
else
w=w+char(55+i); // 对字符处理
}
cin>>a>>b;
while(a.length()<b.length())
a='0'+a;
while(b.length()<a.length())
b='0'+b; // 对齐
a='0'+a;
b='0'+b; // 前面多加一位用来进位
for(i=a.length()-1;i>=0;i--)
{
x[i]=w.find(a[i],0); //查找a[i]再w中的位置获得对应数字
y[i]=w.find(b[i],0); //转换到x,y数组中准备相加
}
for(i=a.length()-1;i>=0;i--)
{
x[i]=x[i]+y[i];
if(x[i]>=N) //进位
{
k=i;
while(x[k]>=N)
{
x[k]=x[k]-N;
x[k-1]++;
k--;
}
}
}
for(i=a.length()-1;i>=0;i--)
a[i]=w[x[i]]; // 重新转化为N进制数
while(a[0]=='0') // 删除前导0
a.erase(0,1);
cout<<a<<endl;
return 0; //完结撒花
}