列表

详情


NC22897. 回文平方数

描述

回文数是指从左向右念和从右像做念都一样的数。如12321就是一个典型的回文数。

给定一个进制B(2<=B<=20十进制),输出所有的大于等于1小于等于300且它的平方用B进制表示时是回文数的数。用’A’,’B’……表示10,11等等。

输入描述

共一行,一个单独的整数B(B用十进制表示)。

输出描述

每行两个数字,第二个数是第一个数的平方,且第二个数是回文数。

示例1

输入:

10

输出:

1 1
2 4
3 9
11 121
22 484
26 676
101 10201
111 12321
121 14641
202 40804
212 44944
264 69696

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++(g++ 7.5.0) 解法, 执行用时: 3ms, 内存消耗: 400K, 提交时间: 2022-11-30 19:22:22

#include <iostream>
#include <string>
using namespace std;
char base[]="0123456789ABCDEFGHIJ";
string trans(int a,int b)
{
	string ans="";
	while(a>0)
	{
		ans=base[a%b]+ans;
        a/=b;
	}
	return ans;
}
bool check(string s)
{
	int len=s.length(); 
	for(int i=0;i<=len/2;i++)
    {
        if(s[i]!=s[len-1-i])
        {
            return false;
        }
    }
	return true; 
}
int main()
{
	int b,a;
	string s;
	cin>>b;
	for(int i=1;i<=300;i++)
	{
		a=i*i;
		s=trans(a,b);
		if(check(s)) cout<<trans(i,b)<<" "<<s<<endl;
	}
	return 0;
} 

C++(clang++11) 解法, 执行用时: 8ms, 内存消耗: 392K, 提交时间: 2021-02-17 20:25:47

#include<bits/stdc++.h>
using namespace std;
int b;
char get(int x){
	if(x<=9){
		return x+'0';
	}
	else{
		return x-10+'A';
	}
}
string base(int n,int b){
	string res;
	while(n){
		res+=get(n%b);
		n/=b;
	}
	reverse(res.begin(),res.end());
	return res;
}
bool check(string s){
	for(int i=0,j=s.size()-1;i<j;i++,j--){
		if(s[i]!=s[j]){
			return false;
		}
	}
	return true;
}
int main(){
	cin>>b;
	for(int i=1;i<=300;i++){
		string num=base(i*i,b);
		if(check(num)){
			cout<<base(i,b)<<" "<<num<<endl;
		}
	}
}

Python3(3.9) 解法, 执行用时: 23ms, 内存消耗: 2832K, 提交时间: 2021-05-11 22:57:46

b = int(input())
m = '0123456789ABCDEFGHIJK'
def f(p):
    res = ''
    while p != 0:
        res = m[p % b] + res
        p //= b
    return res
def isPrime(s):
    n = len(s)
    for i in range(n//2):
        if s[i] != s[n-1-i]:
            return False
    return True
for i in range(1, 301):
    p = f(i ** 2)
    if isPrime(p):
        print(f(i), p)

上一题