//土尔逊Torson 编写于2023/5/05 #define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <string> #include <cstdlib> #include <cstdio> #include <vector> using namespace std; string Add06301(string A, string B) { //两个巨量整数求和函数 用字符串处理精度计算 int dif = A.size() - B.size(); int Maxdis; if (dif >= 0) { for (int i = 0; i < dif; ++i) { B = '0' + B; } Maxdis = A.size(); } else if (dif < 0) { dif = -dif; for (int i = 0; i < dif; ++i) { A = '0' + A; } Maxdis = B.size(); } string tmp(Maxdis, '0'); int carry = 0; for (int i = Maxdis - 1; i >= 0; --i) { int current = (A[i] - '0') + (B[i] - '0') + carry; tmp[i] = current % 10 + '0'; carry = current / 10; //printf("%d %d %c %d %d \n", A[i]-'0',B[i]-'0',tmp[i],current, carry); } //printf("\n"); if (carry != 0) { tmp = '1' + tmp; } return tmp; } char IntToChar06301(int x) { //整数转换成字符格式 if (x < 10) { return x + '0'; } else { return x - 10 + '0'; } } int main() { string str; int n = 1; while (getline(cin, str)) { n = str[0] - '0'; //N 是需要转换成的 m 进制数 if (0 == n) { break; } string A, B; int pos; str = str.substr(2); for (int i = 0; i < str.size() - 1; ++i) { if (' ' == str[i]) { pos = i; } } A = str.substr(0, pos); B = str.substr(pos + 1); string sum; sum = Add06301(A, B); vector<char> answer; long long number = stod(sum); while (number != 0) { //转换 m 进制 answer.push_back(IntToChar06301(number % n)); number /= n; } if (sum[0] == '0') { answer.push_back('0'); } //printf("%s\n", str.c_str()); //printf("%s %d\n", A.c_str(),A.size()); //printf("%s %d\n", B.c_str(),B.size()); //for (int i = 0; i < A.size(); ++i) { // printf("%d", A[i] - '0'); //} //printf("\n"); //printf("%s\n", sum.c_str()); //printf("%c\n", answer[0]); for (int i = answer.size() - 1; i >= 0; --i) { printf("%c", answer[i]); } printf("\n"); } //printf("Over\n"); system("pause"); return EXIT_SUCCESS; } // 64 位输出请用 printf("%lld")