pat 1015(patreon)

网友投稿 1158 2022-09-20


pat 1015(patreon)

1、题目链接 2、题意分析 (1)题意:给出一个数字N,并且给出一个进制radix,请你判断,这个数字N,以及这个数字在进制radix下的反转数是否都为素数? (2)分析:我们需要三个函数来完成上述的功能(包含main()函数)。第一个是isPrime()函数,用来判断是否为素数;第二个是将当前的数在进制radix中转换成反转数,然后再转换成十进制的数,我称之为reverse()函数;第三个是main()函数,作为程序的入口。 3、关于如何判断是否为素数,这在之前我已经谈及过,这里不再做介绍,直接给出代码如下: //判断一个数是否为素数 bool isPrime(int total){ if(total < 2){//如果是2,则直接返回true return true; }  int i ; for(i = 2;i <= (int)sqrt(1.0 * total);i++){//素数判断从2开始 if(total % i == 0){ return false;//返回false } } return true;//这里直接的返回包含了total = 2的情况【重要!!】 } 再实现反转函数,如下: //在当前radix进制反转后,转换成十进制数total int reverse(int a ,int radix){//a为数,radix为进制 int total = 0 ,i = 0 ,j ; int array[size]; while(a!=0){//为了得到各位上的数 ---> 需要除以10 array[i++] = a % radix; a /= radix; } for(j = 0;j < i;j++){ total = total * radix + array[j]; } //printf("反转后 = %d\n",total); return total; } 4、源代码 #include #include #define size 100//6位足够 /* 1.如果一个数是素数,那么无论在什么进制下都是素数! */ //在当前radix进制反转后,转换成十进制数total int reverse(int a ,int radix){//a为数,radix为进制 int total = 0 ,i = 0 ,j ; int array[size]; while(a!=0){//为了得到各位上的数 ---> 需要除以10 array[i++] = a % radix; a /= radix; } for(j = 0;j < i;j++){ total = total * radix + array[j]; } //printf("反转后 = %d\n",total); return total; } //判断一个数是否为素数 bool isPrime(int total){ if(total < 2){//如果是0,1,2,则直接返回true return false; } int i ; for(i = 2;i <= (int)sqrt(1.0 * total);i++){//素数判断从2开始 if(total % i == 0){ return false;//返回false } } return true; } int main(){ int number; int radix; while(scanf("%d %d",&number,&radix) == 2 ){ if(number < 0){ break; } if(number == 1 || number == 0){ printf("No\n"); } else{ if(isPrime(number)){ int total2 = reverse(number,radix); if(isPrime(total2)){ printf("Yes\n"); } else printf("No\n"); } else printf("No\n"); } } } /** 73 10 23 2 23 10 0 2 -2 3 1 2 */ 5、题目坑点 (1)需要注意输入1 2的时候输出是No,因为1不是素数。【重要!!】在判断素数的时候,需要使用if(total <= 1)另加判断一次。 (2)需要注意一些特殊数字,例如,有一些数字本身是素数,反转之后,就变成了1,这是就不是素数了。这一点对应pat测试点2。 6、总结 (1)先想清楚自己要干什么,再动手写代码


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:pat 1081(patients)
下一篇:使用Springboot整合GridFS实现文件操作
相关文章

 发表评论

暂时没有评论,来抢沙发吧~