【洛谷】P1952 火星上的加法运算(高精)
其实方法和正常的十进制高精加一样,只不过把10换成了n
中间还要特判484字符……
#include<bits/stdc++.h>
using namespace std;
#define int long long
int a[1005],b[1005],c[1005];
char s1[1005],s2[1005];
void solve() {
int n;
cin>>n>>s1>>s2;
int l=strlen(s1);
for(int i=0;i<l;i++)
if(s1[i]>='a'&&s1[i]<='z') a[l-i]=s1[i]-87;
else a[l-i]=s1[i]-48;//输入特判×1
l=strlen(s2);
for(int i=0;i<l;i++)
if(s2[i]>='a'&&s2[i]<='z') b[l-i]=s2[i]-87;
else b[l-i]=s2[i]-48;//输入特判×2
l=max(strlen(s1),strlen(s2));
for(int i=1;i<=l;i++)
{//高精加
c[i]+=a[i]+b[i];
c[i+1]=c[i]/n;
c[i]%=n;
}
if(c[l+1]) l++;
for(int i=l;i>0;i--)
if(c[i]>9) cout<<char(c[i]+87);//输出特判
else cout<<c[i];
}
signed main() {
ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
int tt=1;
//cin>>tt;
while(tt--) {
solve();
}
return 0;
}
over~