标签:name scan bool -- 合数 转换 cti 进制转换 rac
题目:PAT1015
题解:一道不多难的题,就是麻烦了点,把其中的细节处理好就行。
首先要搞清楚问的是什么:给你一个十进制的数n,然后让你取n在d进制下的反序数并转换为10进制(这里假设为n1),问n和n1是否都为素数。
所以我大概就写了检查是否为素数的函数,转换进制的函数以及取反序的函数。
刚开始忘了考虑n,很无语...后来还是有个点不过,才想起来1既不是素数也不是合数,要把1的情况考虑进去。
代码:
1 #include<cstdio> 2 #include<cmath> 3 #include<cstring> 4 using namespace std; 5 6 int n,d,cou,num[64]; 7 8 bool isPrime(int n)//是否为素数 9 { 10 if(n==1) return false; 11 for(int i=2;i<=sqrt(n);i++) 12 { 13 if(n%i==0) return false; 14 } 15 return true; 16 } 17 18 void tran(int t)//10进制转换d进制 19 { 20 cou=0; 21 while(t!=0) 22 { 23 num[cou]=t%d; 24 t=t/d; 25 cou++; 26 } 27 cou--; 28 } 29 30 int tran2()//取反序数 31 { 32 int result=0,mid; 33 for(int i=0;i<=cou;i++) 34 { 35 mid=1; 36 for(int j=0;j<cou-i;j++) 37 { 38 mid*=d; 39 } 40 result+=(num[i]*mid); 41 } 42 return result; 43 } 44 45 int main() 46 { 47 while(scanf("%d",&n)&&n>=0) 48 { 49 50 scanf("%d",&d); 51 52 tran(n); 53 54 55 bool f=isPrime(tran2());//检查反序数是否为素数 56 57 if(f&&isPrime(n)) printf("Yes\n"); 58 else printf("No\n"); 59 60 } 61 62 return 0; 63 }
标签:name scan bool -- 合数 转换 cti 进制转换 rac
原文地址:http://www.cnblogs.com/RocSAMA/p/6511605.html