Mi enfoque es usar una cadena para guardar el número de entrada primero y luego guardar los caracteres numéricos en la cadena en la matriz int para facilitar el cálculo.
Puntos de nota
Punto de prueba 1, 3: el resultado final puede exceder el número de dígitos N
Punto de prueba 5: Salida de juicio especial cuando la suma es 0
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
void change(int a[], string s){
for(int i=s.size()-1; i>=0; i--){
a[s.size()-1-i] = s[i] - '0';
}
}
void change2(int a[], string s){
for(int i=s.size()-1; i>=0; i--){
if(s[i] == '0'){
a[s.size()-1-i] = 10 ;
}else{
a[s.size()-1-i] = s[i] - '0';
}
}
}
int main(){
int jzb[22] = {
0}, a[22] = {
0}, b[22] = {
0}, res[22] = {
0}, jw[22] = {
0};
string s1, s2, s3;
cin >> s1 >> s2 >> s3;
change2(jzb, s1); change(a, s2); change(b, s3);
int lena = s2.size();
int lenb = s3.size();
int maxlen = max(lena,lenb);
for(int i=0; i<maxlen; i++){
res[i] = (a[i]+b[i]+jw[i]) % jzb[i];
jw[i+1] = (a[i]+b[i]+jw[i]) / jzb[i];
}
if(jw[maxlen] != 0){
res[maxlen] = jw[maxlen];
}
int flag = 0;
for(int i=s1.size(); i>=0; i--){
if(res[i] != 0){
for(int j=i; j>=0; j--){
printf("%d", res[j]);
}
flag = 1;
break;
}
}
if(!flag){
printf("0");
}
return 0;
}