编程实现:八进制回文平方数
【提示】
八进制数:指逢8进位的一种进位计数制,以0、1、2、3、4、5、6、7共八个数码表示。例如:十进制数8等于八进制数10,十进制数64等于八进制数100,以此类推。
回文数:反向排列与原来一样的数。例如,12321是回文数,1231不是回文数。
平方数:可以写成某个整数的平方的数。例如,9 = 32,9 是一个平方数。
【题目描述】
给定一个十进制正整数N(1≤N≤109),请从小到大输出1~N之间(含1和N)所有满足以下要求的数:
1. 这个数转换为八进制后是一个回文数;
2. 这个数是一个平方数。
例如:N=20,在1~20之间满足要求的数有1、4、9,因为有,
1转换为八进制为1,是一个回文数;且1 = 12,是一个平方数;
4转换为八进制为4,是一个回文数;且4 = 22,是一个平方数;
9转换为八进制为11,是一个回文数;且9 = 32,是一个平方数。
故输出1 4 9
【输入描述】
输入一个十进制正整数N(1≤N≤109)
【输出描述】
输出一行,包含若干个十进制正整数,表示满足题目要求的数。结果从小到大输出,两个正整数之间用一个空格隔开
【样例输入】
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; }