编程实现:八进制回文平方数

信息学奥赛   2023-05-31 00:56   245   0  

编程实现:八进制回文平方数

【提示】

八进制数:指逢8进位的一种进位计数制,以01234567共八个数码表示。例如:十进制数8等于八进制数10,十进制数64等于八进制数100,以此类推。

回文数:反向排列与原来一样的数。例如,12321是回文数,1231不是回文数。

平方数:可以写成某个整数的平方的数。例如,9 = 32是一个平方数。

【题目描述】

给定一个十进制正整数N1N109),请从小到大输出1~N之间(含1N)所有满足以下要求的数:

1. 这个数转换为八进制后是一个回文数;

2. 这个数是一个平方数。

 

例如:N=20,在1~20之间满足要求的数有149,因为有,

1转换为八进制为1,是一个回文数;且1 = 12,是一个平方数;

4转换为八进制为4,是一个回文数;且4 = 22,是一个平方数;

9转换为八进制为11,是一个回文数;且9 = 32,是一个平方数。

故输出1 4  9

【输入描述】

输入一个十进制正整数N1N109

【输出描述】

输出一行,包含若干个十进制正整数,表示满足题目要求的数。结果从小到大输出,两个正整数之间用一个空格隔开

【样例输入】

20

【样例输出】

1 4 9

参考答案:

#include<bits/stdc++.h>
using namespace std;
int n;
int a[100];
 
int main(){
  cin>>n;
  for(int i=1;i*i<=n;i++){//
    int p=i*i;
    int l=1,r=0,t=p;
    while(t){
      a[++r]=t%8;
      t/=8;
    }
    bool f=true;//假设是回文数 
    while(l<=r){
      if(a[l++]!=a[r--]){
        f=false;
        break;
      } 
    }
    if(f==true)cout<<p<<" ";//输出 
  }
  return 0;
}