题解 | #火星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;
}

全部评论

相关推荐

小红书 后端选手 n*16*1.18+签字费期权
点赞 评论 收藏
分享
object3:开始给部分🌸孝子上人生第一课了
点赞 评论 收藏
分享
11-04 14:10
东南大学 Java
_可乐多加冰_:去市公司包卖卡的
点赞 评论 收藏
分享
评论
3
收藏
分享
牛客网
牛客企业服务