首页 > 试题广场 >

对称平方数

[编程题]对称平方数
  • 热度指数:38630 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
在1 <= n < 256的整数中,打印所有其平方具有对称性质的数。如11*11=121。

输入描述:


输出描述:
每行输出一个数,表示对称平方数。
示例1

输入

输出

for i in range(1, 256):
    if str(i**2)==str(i**2)[::-1]:
        print(i)

没有说n的范围,n是否可以为0?

发表于 2019-03-30 08:28:18 回复(1)
更多回答
#include<iostream>
using namespace std;
int main(){
    int a[50],a_count=0;
    int b[10];
    for(int n=1;n<256;n++){
        for(int i=0;i<10;i++)
            b[i]=0;
        int temp=n*n,count=0;
        while(temp>0){
            b[count++]=temp%10;
            temp/=10;
        }
        bool judge=1;
        for(int i=0;i<count/2;i++){
            if(b[i]!=b[count-1-i]){
                judge=0;
                break;
            }
        }
        if(judge==1)
            a[a_count++]=n;
    }
    for(int i=0;i<a_count;i++)
        cout<<a[i]<<endl;
}

发表于 2019-02-23 22:29:48 回复(0)
for n in range(1,256): 
    if   str(n**2) ==str(n**2)[::-1]:
        print(n)
发表于 2019-03-16 18:12:50 回复(3)
Java解法 
public class Main {
    public static void main(String[] args) {
        //注意i=1起始,个人觉得i=0也符合
        for (int i = 1; i < 256; i++) {
            String s = String.valueOf(i * i);
            int j=0;
            int k=s.length()-1;
            while (j<=k){
                if (s.charAt(j)==s.charAt(k)){
                    j++;k--;
                }else break;
            }
            if (j>k) System.out.println(i);
        }
    }
}


发表于 2020-03-17 15:47:28 回复(0)
#include<stdio.h>
#include<string.h>
int main()
{
    int m,n,i,j,k;
    int a[5];
    int flag=0;
    for(i=1;i<=256;i++)
    {
        n=i*i;
        for(j=0;;)
        {
            while(n/10!=0)
            {
                a[j]=n%10;
                n=n/10;
                j++;             }             if(n/10==0)             {                 a[j]=n;                 break;             }         }         for(k=0;k<=j/2;k++)         {             if(a[k]!=a[j-k])             {                 flag=1;                 break;             }         }         if(flag==0)         printf("%d\n",i);         flag=0;     }     return 0;
}

发表于 2019-03-14 10:17:33 回复(0)
#include<stdio.h>
int main()
{
    int i,j,sum;
    for(i=1;i<256;i++)
    {
        j=i*i;sum=0;
        while(j)
        {
            sum=sum*10+j%10;
            j/=10;
        }
        if(sum==i*i)
            printf("%d\n",i);
    }
}

发表于 2020-05-10 22:33:00 回复(0)
#include<iostream>
#include<vector>

using namespace std;

bool fun(int k)
{
	vector<int> v;	//存储逆序数据
	int m=k;
	int ans =0; 
	while(m)
	{
		v.push_back(m%10);
		m=m/10;
	}
	for(vector<int>::iterator it=v.begin();it!=v.end();it++)
	{
		ans=ans*10+(*it);
	}
	if(ans==k)	return true;
	else	return false;	
}

int main()
{
	for(int i=1;i<=256;i++)
	{
		int k=i*i;
		bool flag=fun(k);
		if(flag)	cout<<i<<endl;
	}
	return 0;
}

这题不让输入数据,直接计算1-256的数据就行,这题目真坑人,说也说不清楚。
发表于 2020-02-15 11:41:16 回复(0)
#include <bits/stdc++.h>

using namespace std;

int main(){
    for(int i=1;i<256;++i){
        string temp=to_string(i*i);
        string temp1=temp;
        reverse(temp.begin(),temp.end());
        if(temp1==temp)
            cout<<i<<endl;
    }
    return 0;
}

发表于 2019-07-08 23:23:07 回复(0)
这样应该算是比较简单的实现方法
def is_palindrome(num):
    temp = num
    total = 0
    while temp > 0 :
        total = total  * 10 + temp % 10
        temp //= 10
    return total == num

for i in range(1,256):
    if is_palindrome(pow(1,2)):
        print(i)
发表于 2019-06-13 09:34:50 回复(1)
#include<iostream>
using namespace std;
int main()
{
 int i=1,num=0,temp=0,m=0;
 for(i;i<256;i++)
 {
 num=i*i;
 m=0;
 while(num>0)
 {
 temp=num%10;
 m=temp+m*10;
 num/=10;
 }
 if(m==i*i)
 cout<<i<<endl;
 }
return 0;
}
这个题目在二级C编程中有类似的题,这里只是变换了题目。

发表于 2019-05-21 18:39:03 回复(0)
//用stringstream就很快
#include <iostream>
#include <sstream>

using namespace std;

int main()
{
    for(int ii=1;ii<256;ii++){
        int product = ii*ii;
        stringstream ss;
        string s;
        ss<<product;
        ss>>s;
        bool flag = true;
        for(int i=0,j=s.size()-1;   i<j  ;i++,j--){
                if(s[i]!=s[j]) flag = false;
        }
        if(flag) cout<<ii<<endl;
    }
    return 0;
}

发表于 2019-05-12 01:52:39 回复(0)
public static void main(String[] args) {
        int n=256;
    for(int i=0;i<n;i++){
        int sum=i*i;
        String str=String.valueOf(sum);
        StringBuffer rts=new StringBuffer(str);
        rts.reverse();
        String strr=new String(rts);
        if(str.equals(strr)){
            System.out.println(i);
        }
        }
    }

发表于 2019-04-21 15:27:59 回复(1)
这题真的狗
发表于 2019-04-05 19:12:34 回复(0)
for (int i =1; i<256; i++){
    int result = i*i;
    char result_s[10];
    sprintf(result_s, "%d", result);
    char result_r[strlen(result_s)+1]; 
    int y = strlen(result_s)-1;
    for(int z = 0; z<strlen(result_s); z++){
        result_r[z]=result_s[y];
        y--;}
    if(strcmp(result_s,result_r)==0){
        printf("%d\n",i);}
}
编辑于 2019-03-28 00:22:54 回复(0)
#include <iostream>
#include <string>

bool map(size_t &square) {
    std::string str{ std::to_string(square * square) };
    std::string reverse;
    for (auto i = str.rbegin(); i != str.rend(); ++i)
        reverse.push_back(*i);
    return str == reverse ? true : false;
}

int main()
{
    for (size_t i = 1; i != 256; ++i) {
        if (map(i))
            std::cout << i << std::endl;
    }
    return 0;
}

发表于 2019-03-10 23:05:02 回复(0)
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
while(in.hasNext()) {
int j=in.nextInt();
int n,m;
for(int i=1;i<256;i++) {
n=i*i;
m=0;
while(n!=0) {
m=m*10+n%10;
n/=10;
}
if(m==i*i) {
System.out.println(i);
}
}
}
}
}
发表于 2019-03-05 10:56:44 回复(0)
#include <iostream>
using namespace std;
int main(){
    for(int i=1;i<256;i++){
        int temp=i*i;
        int a[5];        //n的平方不超过5位数
        int k=0;
        int len=0;        //计算位数
        bool flag=true;        //是否为对称数
        while(temp!=0){
            a[k++]=temp%10;
            temp/=10;
            len++;
        }
        for(k=0;k<len;k++){
            if(a[k]!=a[len-1-k]){
                flag=false;
                break;
            }
        }
        if(flag) cout<<i<<endl;
    }
    return 0;
}

发表于 2019-03-01 23:03:03 回复(0)
//16:29开始
#include<iostream>
using namespace std;
int main()
{
 int a[10],s,j,k,i;
 for(i=1;i<256;i++)
 {
  s=i*i;
  j=0;
  do
  {
   a[j++]=s%10;
   s=s/10;
  }while(s!=0);
  k=0;
  do
  {
   s=s*10+a[k++]; 
  }while(k<j);
  if(s==i*i)
   cout<<i<<endl;
 }
}
发表于 2019-02-21 17:01:24 回复(0)
#include <bits/stdc++.h>

int rev(int n){//反转整数
    int new_n=0;
    while(n){
        new_n = new_n*10+n%10;
        n/=10;
    }
    return new_n;
}

int main(){
    int i;
    for(i=1;i<256;i++)
        if(i*i==rev(i*i))
            printf("%d\n",i);
    return 0;
}

发表于 2019-02-26 17:02:00 回复(15)
//if的判断不能反
public class Main {
    public static void main(String[] args) {
        for (int i = 1; i < 256; i++) {
            StringBuilder sb = new StringBuilder(String.valueOf(i*i));
            if(sb.toString().equals(sb.reverse().toString())){
                System.out.println(i);
            }
        }
    }

}

发表于 2019-03-23 23:57:07 回复(0)