题目:
题目描述
计算x进制整数a+b的值,( 0 <= a, b <= 10^100);
输入格式
第一行:一个整数x( 2 <=x<=10 || x=16),表示第二行的两个整数位x进制数。
第二行:两个用空格分割的x进制整数a和b.
输出格式
一行:a+b的值 (按原进制输出)
输入输出样列
输入样例1:
10
10 15
输出样例1:
25
输入样例2:
16
A B
输出样例2:
15
🔑思路:
在高精度模板上改:
需要改的地方:
① 逆序存储时需要提前转成x进制
② 计算时的%10和/10改成%x和/x
③ 保存计算结果的时候要转成x进制
💯CODE:
#include <bits/stdc++.h>
using namespace std;
const int N = 10010 ;
int a[N] , b[N] , c[N] ;
string ans ;
string add(string as , string bs , int x)
{
ans.clear () ;
memset (a , 0 , sizeof (a)) ;
memset (b , 0 , sizeof (b)) ;
memset (c , 0 , sizeof (c)) ;
int alen = as.size () , blen = bs.size () , clen = max (alen , blen) + 1 ;
for (int i = 1; i <= alen; i++)
{
if (as[alen - i] >= '0' && as[alen - i] <= '9')
a[i] = as[alen - i] - '0' ;
else
a[i] = as[alen - i] - 'A' + 10 ;
}
for (int i = 1; i <= blen; i++)
{
if (bs[blen - i] >= '0' && bs[blen - i] <= '9')
b[i] = bs[blen - i] - '0' ;
else
b[i] = bs[blen - i] - 'A' + 10 ;
}
for (int i = 1; i < clen; i++)
{
c[i] += a[i] + b[i] ;
c[i + 1] = c[i] / x ;
c[i] %= x ;
}
while (c[clen] == 0 && clen > 1)
{
clen -- ;
}
for (int i = clen; i >= 1; i --)
{
if (c[i] >= 0 && c[i] <= 9)
ans += c[i] + '0' ;
else
ans += c[i] - 10 + 'A' ;
}
return ans ;
}
int main()
{
string a , b ;
int x ;
cin >> x >> a >> b ;
cout << add (a , b , x) ;
return 0;
}
AC了