时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld
题目描述
回文数是指数字从前往后读和从后往前读都相同的数字。
例如数字 12321 就是典型的回文数字。
现在给定你一个整数 B,请你判断 1∼300 之间的所有整数中,有哪些整数的立方转化为 B 进制后,其 B 进制表示是回文数字。
B小于等于16,故可能出现字母,字母同样按照回文数字一样判断是否为回文。例:A9A也为回文数字
输入描述:
一个整数 B。(2<=B<=16)
输出描述:
每行包含两个在 B 进制下表示的数字。
第一个表示满足立方值转化为 B 进制后是回文数字那个数,第二个数表示第一个数的立方。
所有满足条件的数字按从小到大顺序依次输出。
示例1
输入
复制
10
输出
复制
1 1 2 8 7 343 11 1331 101 1030301 111 1367631
示例2
输入
复制
2
输出
复制
1 1 11 11011mei吗,
#include<bits/stdc++.h>
using namespace std;
string getstr(int x,int n)
{
string s="";//等同于string s;
while(x)
{
if(x%n>9) s+='A'+x%n-10;
else s+='0'+x%n;
x/=n;//注意是n不是10;
}
reverse(s.begin(),s.end());//反转
return s;
}
bool check(string x)
{
int l=0,r=x.size()-1;
while(l<=r&&x[l]==x[r])
l++,r--;
return l>r;
}
int main()
{
int b;
cin>>b;
for(int i=1;i<=300;i++)
{
string s1=getstr(i,b);
string s2=getstr(i*i*i,b);
if(check(s2))
cout<<s1<<" "<<s2<<endl;
}
return 0;
}