USACO-Section1.2 Palindromic Squares [回文数][进制转换]
2017-06-01 19:47
465 查看
2017-6-1
给定一个进制B(2<=B<=20,由十进制表示),输出所有的大于等于1小于等于300(十进制下)且它的平方用B进制表示时是回文数的数。用’A’,’B’……表示10,11等等。(copy from nocow)
题目大意
文数是指从左向右念和从右向左念都一样的数。如12321就是一个典型的回文数。给定一个进制B(2<=B<=20,由十进制表示),输出所有的大于等于1小于等于300(十进制下)且它的平方用B进制表示时是回文数的数。用’A’,’B’……表示10,11等等。(copy from nocow)
题解
进制转换,然后判断回文代码
/* ID: zachery1 PROG: palsquare LANG: C++ */ #include <iostream> #include <fstream> #include <string> #define cin fin #define cout fout using namespace std; ifstream fin("palsquare.in"); ofstream fout("palsquare.out"); int B; char b[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K'}; bool isPal(string str) { int i = 0, j = str.length() - 1; while (i < j) { if (str[i] != str[j]) return false; i++; j--; } return true; } string baseB(int x) { string num = ""; while (x) { num = b[x % B] + num; x /= B; } int i; for (i = 0; i < num.length(); i++) if (num[i] != '0') break; return num.substr(i); } int main() { cin >> B; for (int i = 1; i <= 300; i++) { string x = baseB(i); string x2 = baseB(i*i); if (isPal(x2)) { cout << x << " " << x2 << endl; } } return 0; }
相关文章推荐
- USACO-Section1.2 Dual Palindromes [回文数][进制转换]
- USACO 1.2 Dual Palindromes (回文,进制转换)
- USACO 1.2 Palindromic Squares (进制转换,回文)
- USACO 1.2 Palindromic Squares (进制转换,回文)
- USACO之Section1.2.4 Palindromic Squares[回文数][进制转换]
- USACO-Section 1.2 Milking Cows【贪心算法】
- USACO-Section1.2 transform[枚举]
- USACO-Section 1.2 Transformations [...]
- USACO Section1.2 Transformations
- USACO Section 1.2 Milking Cows 解题报告
- [USACO 1.2] Summary of Section 1.2
- USACO Section1.2 Palindromic Squares
- USACO Section 1.2 Name That Number 解题报告
- USACO Section 1.2 Milking Cows
- USACO Section1.2破碎的项链
- USACO Section 1.5 Prime Palindromes(回文数+素数)
- 【枚举】洛谷 P1207 [USACO1.2]双重回文数 Dual Palindromes
- USACO-Section 1.2 Milking Cows[数组模拟]
- USACO-Section 1.2 Palindromic Squares【暴力枚举】
- USACO Section1.2 Dual Palindromes