PAT甲级1015题解——令人迷茫的翻译

题目分析:

本题计算过程简单,但翻译令我迷茫:题意读清楚很重要(反正我是懵逼了)对于一个10进制的数,如果它是一个素数,把它转换成d进制,再将这个序列逆序排,这个逆序的d进制数的10进制表示如果也是素数,则输出Yes,否则No

 1 #include<iostream>
 2 #include<cmath>
 3 using namespace std;
 4 
 5 int a[20];        //存放n转换成的d进制数的每一位 
 6 int cnt;        //存放d进制的位数
 7  
 8 bool isPrime(int x){
 9     if(x == 1) return false;
10     for(int i = 2; i <= sqrt(x); i++){
11         if(x % i == 0) return false;
12     } 
13     return true;
14 }
15 
16 void transform(int n, int d){
17     //短除法 将值存入a数组
18     cnt = 1;
19     while(n > 0){        
20         int x = n % d;
21         a[cnt++] = x; 
22         n /= d;
23     }
24     //将a数组从cnt-1~1开始遍历完成将d进制的翻转再次转换成10进制表示的过程
25     int ans = 0;
26     int base = 1;
27     for(int i = cnt-1; i >= 1; i--){
28         ans += base * a[i];
29         base *= d;
30     } 
31     if(isPrime(ans)) printf("Yes
");
32     else printf("No
");
33 } 
34 
35 int main(){
36     int n, d;
37     while(scanf("%d", &n) != EOF){
38         if(n < 0) break;
39         scanf("%d", &d);
40         if(isPrime(n)){
41             //将n转换成d进制的数
42             transform(n, d); 
43         }else{
44             printf("No
");
45         }
46     }
47     return 0;
48 }
原文地址:https://www.cnblogs.com/findview/p/11694354.html