#写的代码在东方博宜 1547上显示运行错误,如何解决?

#写的代码在东方博宜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<

img


#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;
}