首页 > 试题广场 >

对称平方数1

[编程题]对称平方数1
  • 热度指数:28014 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
打印所有不超过256,其平方具有对称性质的数。如2,11就是这样的数,因为2*2=4,11*11=121。

输入描述:
无任何输入数据


输出描述:
输出具有题目要求的性质的数。如果输出数据不止一组,各组数据之间以回车隔开。
示例1

输入

输出

 #include<iostream>;
using namespace std;
#include <algorithm>
#include<string>
int main(){   
    for(int i=0;i<256;i++)
    {
        string str = to_string(i*i);
        string temp = str;
        reverse(str.begin(),str.end());
       if(temp.compare(str)==0){
            cout<<i<<" "<<endl;
        }
    }
    //短小精悍
    
    
    
发表于 2022-04-03 21:37:00 回复(0)
Java 解法
public class Main {
    public static void main(String[] args) {
        for (int i = 0; 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 11:07:33 回复(0)
万一是负数呢...<256的数应该包含所有的负数吧...
发表于 2021-02-17 21:51:24 回复(0)
#include<stdio.h>//对称性质即反序与正序数相等
int fanxu(int n)
{
    int sum=0;
    while(n)
    {
        sum=sum*10+n%10;
        n=n/10;
    }
    return sum;
}
int main()
{
    for(int i=0;i<=256;i++)
        if(i*i==fanxu(i*i))
            printf("%d\n",i);
}

发表于 2020-03-23 20:18:03 回复(0)
#include<iostream>
#include<algorithm>
#include<sstream>
using namespace std;
int main()
{
    string s1,s2;
    stringstream s;
    for(int i=0;i<257;i++)
    {
        s<<i*i;
        s1=s.str();
        s2=s1;
        reverse(s1.begin(),s1.end());
        if(s1==s2) cout<<i<<endl;
        s.str("");
    }
}

发表于 2019-07-15 10:02:19 回复(0)
测试样例里面包括0,所以要将0也算入范围内
#include<iostream>
using namespace std;
int main(){
    for(int i=0;i<=256;i++){
        int total=0,temp=i*i;
        while(temp>0){
            total=total*10+temp%10;
            temp/=10;
        }
        if(total==i*i)
            cout<<i<<endl;
    }
}

发表于 2019-03-01 10:56:06 回复(0)
跟反序数那道题解法差不多
注意0也是对称平方数
#include<iostream>
#include<cstring>
using namespace std;
int reverse(int n) {
	int res = 0;
	while(n!=0){
		res = n % 10 + res * 10;
		n /= 10;
		}
	return res;
}
int main() {
	for (int i = 0; i <= 256; i++) {
		if (i*i == reverse(i*i))
			cout << i << endl;
	}
}
发表于 2020-02-15 19:30:23 回复(0)
#include <stdio.h>

int isDuichengnum(int m) {
    int remain;
    int reverse = 0;
    while (m) {
        remain = m % 10;
        m = m / 10;
        reverse = reverse * 10 + remain;
    }
    return reverse;
}


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

发表于 2024-04-09 19:27:31 回复(0)
#include <stdio.h>

int reverse(int n) {
    int reverse = 0;
    while(n) {
        int remain = n%10;
        n = n/10;
        reverse = reverse*10 + remain; 
    }
    return reverse;
}

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

编辑于 2024-02-05 22:28:46 回复(0)
#include <iostream>
using namespace std;

// 求逆序数
int Reverse(int n){
    int u=0;
    while (n>0) {
        u *= 10;
        u += n%10;
        n/=10;
    }
    return u;
}

int main() {
    for(int i=0; i<=256; i++){
        if (i*i==Reverse(i*i)) {
            cout<<i<<endl;
        }
    }
}

发表于 2023-03-15 21:58:07 回复(0)
利用对称的性质,反向后的数应该和没反向的数相等 

#include<bits/stdc++.h>
using namespace std;
int main(){
    for(int i=0;i<=256;i++){
        int t = i*i;
        int sum=0;
        do{
            sum = sum*10 + t%10; 
            t /= 10;
        }while(t!=0);
        if(sum == i*i) cout<<i<<endl;
    }     
    return 0;
}

发表于 2019-07-30 14:10:32 回复(0)
#include <iostream>
using namespace std;
int main(){
    for(int i=0;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:04:56 回复(0)
#include <iostream>
using namespace std;

int Reverse(int n){
    int result=0;
    for(int i=0;n>0;i++){
        result*=10;
        result+=n%10;
        n/=10;
    }
    return result;
}

int main() {
    for(int i=0;i<=256;i++){
        if(i*i==Reverse(i*i)){
            cout<<i<<endl;
        }
    }
}
// 64 位输出请用 printf("%lld")
编辑于 2024-04-05 23:41:27 回复(0)
#include <iostream>
using namespace std;

bool sym(int n){
    int res = 0,temp = n;
    while( n != 0){
        res = res*10 + n%10;
        n /= 10;
    }
    return temp == res;
}
int main() {
    for(int i=0; i<=256; ++i){
        if(sym(i*i)) cout << i << endl;
    }
    return 0;
}

编辑于 2024-03-17 10:10:32 回复(0)
#include <iostream>
using namespace std;

int main() {
    for(int i=0;i<=256;i++){
        int pf=i*i;
        if(pf<10){
            printf("%d\n",i);
        }
        else if(pf<100){  //两位数
            if(pf/10==pf%10){
                printf("%d\n",i);
            }
        }
        else if(pf<1000){   //三位数
            if(pf/100==pf%10){
                printf("%d\n",i);
            }
        }
        else if(pf<10000){   //四位数    
            if((pf/1000==pf%10)&&(pf/100%10==pf/10%10)){
                printf("%d\n",i);
            }
        }
        else{   //五位数
            if((pf/10000==pf%10)&&(pf/1000%10==pf/10%10)){
                printf("%d\n",i);
            }

        }
    }
    return 0;
}


编辑于 2024-02-28 16:49:15 回复(0)
#include <iostream>
using namespace std;

int reverse(int n) {    //求反序数
    int rev = 0;
    while (n) {
        rev = rev * 10 + n % 10;
        n /= 10;
    }
    return rev;
}

int main() {
    for (int i = 0; i <= 256; i++) {
        if (i * i == reverse(i * i)) {
            cout << i << endl;
        }
    }
    return 0;
}

编辑于 2024-02-02 10:14:52 回复(0)
#include <iostream>
using namespace std;

int Reverse(int x){
    int p=0;
    while(x!=0){
        p*=10;
        p+=x%10;
        x/=10;
    }
    return p;
}

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

编辑于 2024-01-13 21:25:59 回复(0)
#include <stdio.h>

int main() {
    int x;
    for (int i = 0; i <= 256 ; ++i) {
        x = i*i;
        if(x<10) printf("%d\n",i);  //1位数
        else if(x>=10&&x<100) { //2位数
            if(x/10==x%10){
                printf("%d\n",i);
            }
        }
        else if(x>=100&&x<1000){ //3位数
            if(x/100==x%10){
                printf("%d\n",i);
            }
        }
        else if(x>=1000&&x<10000){//4位树
            if(x/1000==x%10&&((x/100)%10)==((x%100)/10)){
                printf("%d\n",i);
            }
        }
        else {//5位数
            if (x / 10000 == x % 10 && ((x / 1000) % 10) == (x % 100) / 10) {
                printf("%d\n", i);
            }
        }
    }
    return 0;
}

编辑于 2024-01-13 17:34:31 回复(0)
#include <cstdio>

int Reverse(int n){
    int remain,reverse=0;
    while(n>0){
        remain = n%10;
        n /= 10;
        reverse = reverse*10+remain;
    }
    return reverse;
}

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

编辑于 2024-01-11 15:33:59 回复(0)
#include <iostream>
#include <string>
using namespace std;

//先将int转换为字符串,然后依次前后位比对
bool func(int n){
    string s=to_string(n);
    for(int i=0;i<s.size()/2;i++){
        if(s[i]!=s[s.size()-i-1]){
            return false;
        }
    }
    return true;
}
int main() {
    for(int i=0;i<=256;i++){
        if(func(i*i)){
            cout<<i<<endl;
        }
    }
}

发表于 2023-03-22 09:26:37 回复(0)

问题信息

上传者:小小
难度:
80条回答 6788浏览

热门推荐

通过挑战的用户

查看代码