题解 | #火星A+B#
火星A+B
https://www.nowcoder.com/practice/46bb070835e548678c78477f1fb0b92e
#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; }