题解:UVA12802 Gift From the Gods

· · 题解

题目大意:

无限输入一个正整数 a,输出 2a。直到 a 既是回文数又是质数就停止读入。

大体思路:

先判断该数是否为回文数,在判断该数是否为素数。\ 判断素数模板如下:(代码有注释)

bool is_Prime(int n){
    if(n<=1) return 0;//小于等于1时必不为素数。
    if(n==2) return 1;//等于2时必为素数。
    for(int i=2;i*i<=n;i++)
        if(n%i==0)//如果被i整除,即为合数
            return false;
    return true;
}

判断回文数模板如下:(代码有注释)

bool is_Hw(int n){
    int cnt=0,a[1005];//cnt记有几位,a数组记n的每一位
    while(n--){//分解n
        cnt++;//下标加一(位数加一)
        a[cnt]=n%10;//取到最后一位
        n/=10;
    }
    for(int i=1;i<=cnt;i++){//判断回文数
        if(a[i]!=a[cnt-i+1]) return 0;//如果不同,即不为回文数。
    }
    return 1;
}

代码:(去注释)

#include<bits/stdc++.h>
using namespace std;
bool is_Prime(int n){
    if(n<=1) return 0;
    if(n==2) return 1;
    for(int i=2;i*i<=n;i++)
        if(n%i==0)
            return false;
    return true;
}
bool is_Hw(int n){
    int cnt=0,a[1005];
    while(n--){
        cnt++;
        a[cnt]=n%10;
        n/=10;
    }
    for(int i=1;i<=cnt;i++){
        if(a[i]!=a[cnt-i+1]) return 0;
    }
    return 1;
}
int main(){
    int n;
    while(cin>>n){
        cout<<2*n<<endl;
        if(is_Hw(n)==1&&is_Prime(n)==1) break;
    }
    return 0;
}