qwq,菜啊 是真的菜啊,又有很久没写过题了
按照题意来说:
一个数n的回文数可以理解为:他本身+他本身倒过来,要去掉倒过来以后的第一个字符
比如 12002 的回文数,就是
它本身: 12002
倒过来: 20021
去掉重复的2:0021
回文数:120020021
我这里写的比较懒,就调用了一下string的函数 reverse 反转字符串, erase删除字符,然后直接+
再把字符串转数字,注意,要转成longlong,所以要atol,
(感觉直接手写处理数字会更优雅一点
判素的话,看看数据范围 1e9,回文数字1e17, 普通的判素到的话,大概是1e8左右,只有一个数字,看起来可以冲,就直接冲了
#include<iostream>
#include <algorithm>
using namespace std;
bool isprime(long long n)
{
if(n ==1){return false;}
for(long long i = 2 ;i*i <= n ; i++)
{
if(n%i == 0)
{
return false;
}
}
return true;
}
int main()
{
string t;
cin >> t;
string b = t;
reverse(t.begin(),t.end());
t.erase(t.begin());
b += t;
long long n = atol(b.c_str());
if(isprime(n))
{
cout<<"prime"<<endl;
}
else{
cout<<"noprime"<<endl;
}
}