1015. Reversible Primes (20)

Posted lan126

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1015. Reversible Primes (20)相关的知识,希望对你有一定的参考价值。

距离PAT考试还有13天最重要的是做透每一题

 

(1)思路

就是按照题目说的做

 

又把stringstream熟悉了一遍,输入到stringstream后可以输出到一个string对象

又把进制转换练习了一遍,10->d进制就是不断取余的过程,d->进制就是各位的权与各位相乘后相加

质数的判断就是除了1和它本身没有其他公因数的数 小于等于1时不是质数

string中的某个元素如下面的ans[i]的类型是char

 

虽然这里没用到 

atoi()配合c_str()可以将一个string转成int型的值

此时要包含<cstdlib>

顺便看一下如何将数转成字符串 提供以下接口

string to_string (int val);
string to_string (long val);
string to_string (long long val);
string to_string (unsigned val);
string to_string (unsigned long val);
string to_string (unsigned long long val);
string to_string (float val);
string to_string (double val);
string to_string (long double val);

 

#include <cstdio>
#include <string>
#include <sstream>
#include <cstdlib>
#include <cmath>
#include <vector>
#include <iostream>
using namespace std;

string to_rd(int a,int b) {
  stringstream ss;
  string s;
  while(a) {
    ss<<a%b;
    a/=b;
  }
  ss>>s;
  return s;
}
int to_10(string ans,int b) {
  int res=0;
  for(int i=0;i<ans.size();i++) {
    res=res*b+ans[i]-\'0\';
  }
  return res;
}
bool is_prime(int n) {
  if(n <= 1) return false;
  int flag=0;
  for(int i=2;i<=sqrt(n);i++) {
    if(n % i == 0) flag=1;
  }
  return flag==1? false:true;
}
string f(int a,int b) {
  string ans=to_rd(a,b);
  int ians=to_10(ans,b);
  if(is_prime(ians) && is_prime(a)) return "Yes";
  else return "No";
}

int main() {
  int a,b;
  while(1) {
    scanf("%d",&a);
    if(a < 0) return 0;
    scanf("%d",&b);
    cout<<f(a,b)<<endl;
  }
  return 0;
}

 

以上是关于1015. Reversible Primes (20)的主要内容,如果未能解决你的问题,请参考以下文章

PAT1015:Reversible Primes

pat 1015 Reversible Primes(20 分)

1015 Reversible Primes

1015 Reversible Primes

1015 Reversible Primes (20)(20 分)

PAT 甲级 1015 Reversible Primes