#写的代码在东方博宜1547(https://oj.czos.cn/p/1547)上显示运行错误,如何解决?
#1547 - 小X转进制
题目描述
小X喜欢研究进制转换。
在了解了进制转换的一般流程后,小X突然想起了以前学过的回文数(正着读倒着读都一样的数),于是开始思考一个奇怪的问题:1 到 N 中有多少个整数的平方在 M 进制下是回文数呢?
小X随手列了几个: 2 的平方 4 ,10 进制表示为 4,是回文数;
3 的平方 9,2 进制表示为 1001,是回文数;
9046 的平方 81830116,16 进制表示为4E0A0E4,是回文数。
小X觉得要全列出来太困难了,希望你帮助他。
输入
第一行包含用一个空格隔开的两个整数 N,M。
输出
第一行包含一个整数,表示满足要求的整数个数。
样例
输入复制
2 10
输出复制
2
说明
数据范围
对于30% 的数据,M=10。
对于另外 30% 的数据,M=2。
对于 100% 的数据,1≤N≤10000,2≤M≤16。
#include
using namespace std;
bool hw(long long n){
bool f;
long long t=n;
long long x=0;
while(n!=0){
x=x*10+n%10;
n/=10;
}
if(t==x){
f=true;
}else{
f=false;
}
return f;
}
int zh(long long n,long long b){
string s;
long long x,y;
char c;
if(b>=2&&b<=10){
while(n!=0){
x=n%b;
c=x+'0';
s=c+s;
n=n/b;
}
}else if(b>10&&b<=16){
while(n!=0){
x=n%b;
if(x<10){
c=x+'0';
}else{
c=x+'A'-10;
}
s=c+s;
n=n/b;
}
}
y=stoi(s);
return y;
}
int main(){
long long a,b;
cin>>a>>b;
long long i=0,j;
for(j=1;j<=a;j++){
long long x=zh(j*j,b);
-
if(hw(x)==true){
i++;
}
}
cout<

#include<bits/stdc++.h>
using namespace std;
int n,m,a[300],ans;
bool f(int x)
{
fill(a,a+50,0);
int t=0;
for(int i=x;i>0;i/=m)
a[t++]=i%m;
for(int i=0,j=t-1;i<j;i++,j--)
if(a[i]!=a[j]) return 0;
return 1;
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
if(f(i*i)==1) ans++;
cout<<ans;
return 0;
}