#include <stdio.h>//这题真没必要死磕,看通过率话就知道这题根本不是入门水平 #include <string.h> void su(int arr[]) { //将前25个素数(1,2,3,5,7...)赋给arr数组(从下标1开始) int k, m = 1; //m记录将要获得第几个素数 for (int i = 1; m <= 25; i++) { k = 1; for (int j = 2; j <= i / 2; j++) { if (i % j == 0)k = 0; } if (k == 1) { arr[m] = i; m++; } } } int jiecheng(int arr[], int k) { //类似阶乘函数,将素数累乘,从arr[1]开始累乘到arr[k] int result = 1; for (int i = 1; i <= k; i++) result *= arr[i]; return result; } int count(char str[], int len, int arr[]) { //计算火星数的十进制数 ,其中str字符串为火星数 int k = 1, sum = 0, m; //k=1,对应火星数的个位 for (int i = len - 1; i >= 0; i -= 2) { //从后往前遍历str,i-=2是为了将','字符也跳过 m = str[i] - '0'; if (str[i - 1] > '0' && str[i - 1] < '9') { //(例如10,2,1中第三位为两位数10,则将十位上的'1' (即str[--i])累加到m里) m += (str[--i] - '0') * 10; } sum += jiecheng(arr, k++) * m; // 当前火星数的第k位数 乘以 arr[1]*arr[2]*...*arr[k] } return sum; } int main() { int arr[30], al, bl, q[100]; char a[50], b[50]; su(arr); scanf("%s%s", a, b); al = strlen(a); bl = strlen(b); int sum = count(a, al, arr) + count(b, bl, arr); int i; for (i = 1; sum != 0; i++) { //q[]得到倒序的火星数 q[i] = sum % arr[i + 1]; //%除arr[2]才会得到q[1]的值 sum = sum / arr[i + 1]; } i--; printf("%d", q[i--]); for (; i >= 1; i--) { //最后反向输出 printf(",%d", q[i]); } return 0; }