本文最后更新于 960 天前,其中的信息可能已经有所发展或是发生改变。
原题链接
描述
回文数是指数字从前往后读和从后往前读都相同的数字。
例如数字 12321 就是典型的回文数字。
现在给定你一个整数 B,请你判断 1∼300 之间的所有整数中,有哪些整数的平方转化为 B 进制后,其 B 进制表示是回文数字。
输入格式
一个整数 B。
输出格式
每行包含两个在 B 进制下表示的数字。
第一个表示满足平方值转化为 B 进制后是回文数字那个数,第二个数表示第一个数的平方。
所有满足条件的数字按从小到大顺序依次输出。
数据范围
2≤B≤20,
对于大于 9 的数字,用 A 表示 10,用 B 表示 11,以此类推。
输出样例:
输出样例:
| 1 1 |
| 2 4 |
| 3 9 |
| 11 121 |
| 22 484 |
| 26 676 |
| 101 10201 |
| 111 12321 |
| 121 14641 |
| 202 40804 |
| 212 44944 |
| 264 69696 |
进制转换模板
| |
| string to_p(int x,int p){ |
| string ans; |
| if (x==0) return "0"; |
| while(x){ |
| int k=x%p; |
| char c; |
| if (k<10) c=k+'0'; |
| else c=k+'A'-10; |
| ans=c+ans; |
| x/=p; |
| } |
| return ans; |
| } |
| |
| |
| int to_x(string x,int p){ |
| int ans=0; |
| for(int i=0;i<x.size();i++){ |
| ans=ans*p+x[i]-'0'; |
| } |
| return ans; |
| } |
| |
| |
| string r_to_p(string x,int r,int p){ |
| return to_p(to_x(x,r),p); |
| } |
代码
| #include <bits/stdc++.h> |
| using namespace std; |
| |
| string to_p(int x,int p) |
| { |
| string ans; |
| if (x==0) return "0"; |
| while(x){ |
| int k=x%p; |
| char c; |
| if (k<10) c=k+'0'; |
| else c=k+'A'-10; |
| ans=c+ans; |
| x/=p; |
| } |
| return ans; |
| } |
| |
| int main(){ |
| int n; |
| cin>>n; |
| for(int i=1;i<=300;i++){ |
| string s1,s2; |
| s1=s2=to_p(i*i,n); |
| reverse(s2.begin(),s2.end()); |
| if(s1==s2) cout<<to_p(i,n)<<" "<<s1<<endl; |
| } |
| return 0; |
| } |