【USACO TRAINING】回文平方数
2016-09-06 21:35
405 查看
1026: 【USACO TRAINING】回文平方数
时间限制: 1 Sec 内存限制: 64 MB提交: 169 解决: 76
[提交][状态][我的提交]
题目描述
回文数是指从左向右念和从右像做念都一样的数。如12321就是一个典型的回文数。 给定一个进制B(2<=B<=20),输出所有的大于等于1小于等于300且它的平方用B进制表示时是回文数的数。用大写字母’A’,’B’……表示10,11等等。
输入
第1行:一个整数B,表示进制(B用十进制表示)。
输出
若干行,每行两个数字,第二个数是第一个数的平方,且第二b16d
个数是回文数。(注意:这两个数都应该表示为B进制数)
样例输入
Copy (如果复制到控制台无换行,可以先粘贴到文本编辑器,再复制)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
思路:从一到三百循环,判断每一个数在n进制时是否是回文数,是就输出,否不输出。p.s:超过10进制时需用字母代替数,如:20进制:123456789ABCDEFGHI;
#include<iostream> #include<cstring> #include<cstdio> #include<algorithm> #include<cmath> using namespace std; int n,square,an[1000010],bb[1000010]; int turn(int a,int b){ int i; for(i=0;;i++){ an[i]=b%a; b=b/a; if(b==0) break; } return i; } bool f(int n){ for(int i=0;i<=n;i++) if(an[i]!=an[n-i]) return 0; return 1; } void print(int a,int b){ int i; for(i=0;;i++){ bb[i]=b%a; b=b/a; if(b==0) break; } for(i=i;i>=0;i--) if(bb[i]>9) printf("%c",bb[i]-10+'A'); else printf("%d",bb[i]); } int main(){ int i; scanf("%d",&n); for(i=1;i<=300;i++){ square=i*i; int j=turn(n,square); if(f(j)){ print(n,i); putchar(32); for(int k=0;k<=j;k++) if(an[k]>9) printf("%c",an[k]-10+'A'); else printf("%d",an[k]); putchar(10); } } return 0; }
相关文章推荐
- 【枚举判断】Palindromic Squares 回文平方数 (Usaco_Training 1.2)
- 【枚举判断】Palindromic Squares 回文平方数 (Usaco_Training 1.2)
- USACO Training Section 1.5(八皇后升级)
- usaco training-Runaround Numbers
- 【USACO TRAINING】数字金字塔
- [USACO Training] Section 1.1
- 等差数列 [USACO Training Section 1.4]
- 【USACO TRAINING】奶牛家谱
- USACO Training 3.4.2 American Heritage 题解与分析
- USACO Training3.3亚瑟王的宫殿【搜索】By cellur925
- *usaco training 5.4.4 Betsy's Tour 题解
- USACO Training切题纪念
- [Usaco training] 货币系统
- 【USACO TRAINING】你的飞碟在这儿!【原创】
- USACO Training 3.3 商店购物 By cellur925
- usaco training 4.1.2 Fence Rails 题解
- usaco training 5.5.1 Picture 题解
- USACO Training Section 3.2 & 洛谷P2730
- [USACO Training] Section 1.4
- 我的第二个 USACO Training--Greedy Gift Givers