首页 > 技术文章 > 一本通1155 回文三位数

Jiangxingchen 2020-02-04 19:41 原文

【题目描述】

如果一个数从左边读和从右边读都是同一个数,就称为回文数。例如6886就是一个回文数,求出所有的既是回文数又是素数的三位数。

【输入】

     (无)

【输出】

所有的既是回文数又是素数的三位数。一个数一行。

【输入样例】

(无)

【输出样例】

(无)

1.之前回文数和素数的题都做过,
现在居然结合起来搞了个回文素数...
行吧,

现在让我们见识一下这道题吧。
2.按规矩分析一下吧,
这个题的特点比较明显了啊,
题目中就能看出来两个特点,
回文数和三位数。
题干中的素数特点也比较明显。
所以这个题有三个关键点,
我们就围绕这三个点来展开程序设计。
3.三位数这个特点嘛...没什么好说的
只有和回文数搭配起来才能爆发出强大的威力,
仔细观察121,232等回文三位数,
就能发现百位数和个位数是一样的,
十位数不用管。
根据前面的经验,
判断素数的最快方法,
就是从二到这个数的平方根向下取整都试一遍,
没有能除尽的,
这个数就是质数了。
把100到999之间的数都判断一遍,
然后输出,
然后这题就算做完了...
4.让我们对着题解看一看吧。
#include<iostream>
#include<cmath>
using namespace std;
bool zhishu(int x);//定义一个叫质数的bool型函数
int main()
{
    int i;
    for(i=100;i<=999;i++)//枚举三位数
        if(zhishu(i)&&(i/100==i%10))//判断质数和回文
        cout<<i<<endl;
    return 0;
}
bool zhishu(int x)//描述这个叫质数的bool函数
{
    int i=2;
    while(i<=floor(sqrt(x))&&(x%i!=0))//判断质数的条件
    i++;
    if(i>floor(sqrt(x)))
    return true;
    return false;
}

5.今天总结时间又到了哈,

   这个题三个点,

   判断素数的方法做了好多遍了,

   回文数就比较难判断了,

   一开始觉得不怎么好做,

   想搞一个相反的字符串然后和原字符串比较,

   觉得实在太难搞了,肯定不是这样,

   然后列了几个回文三位数,发现我是个傻子...

   回文三位数的规律只要一写出数来,

   简直显而易见。

   当做到一个不可能特别难的题,

   但你想的方法真的特别难搞得时候,

   一定会有简单的,属于这个题的方法。

   

   

推荐阅读