我需要显示回文,并且这些回文的正方形也必须是回文(例如,11是回文,其正方形121也是回文)。使用c ++,循环。这是我到目前为止的结果(仅输出回文):
#include <iostream>
#include <cmath>
using namespace std;
int main(){
int n, r, atv, temp;
for(n = 0; n <= 100; ++n){
temp = n;
atv = 0;
while(temp){
r = temp % 10;
temp = temp / 10;
atv = atv * 10 + r;
}
if(n == atv){
cout << n << '\n';
}
}
return 0;
}
我将继续进行,并假设您自己的代码使您感到困惑,并在其中添加另一层会使代码难以阅读。为了解决这个问题,我们可以引入一个检查数字是否为回文的函数。
bool is_palindrome(const int num){
int reversed_num = 0;
int temp = num;
while(temp){
int last_num = temp % 10;
temp /= 10;
reversed_num = reversed_num * 10 + last_num;
}
return num == reversed_num;
}
我们还可以通过使用std::string
使此功能更具可读性。
bool is_palindrome(const int num){
string original = to_string(num);
return original == string(rbegin(original), rend(original));
}
在后者中,我们使用反向begin
和end
迭代器构造相同但反向的字符串。
现在,您的代码看起来更加清晰易读。
int main(){
for(int num = 0; num <= 1000; ++num){
if(is_palindrome(num) && is_palindrome(num * num)){
cout << num << '\n';
}
}
return 0;
}