龙空技术网

USACO备考冲刺必刷题 | P1206 Palindromic Squares

热爱编程的通信人 37

前言:

而今朋友们对“squares是什么意思怎么读”都比较看重,看官们都想要学习一些“squares是什么意思怎么读”的相关内容。那么小编在网上汇集了一些有关“squares是什么意思怎么读””的相关资讯,希望兄弟们能喜欢,看官们快快来了解一下吧!

学习C++从娃娃抓起!记录下USACO(美国信息学奥赛)备考学习过程中的题目,记录每一个瞬间。

附上汇总贴:USACO备考冲刺必刷题 | 汇总-CSDN博客

【题目描述】

回文数是指从左向右念和从右向左念都一样的数。如 12321 就是一个典型的回文数。

给定一个用十进制表示的正整数 B,输出所有 [1,300] 中,它的平方用 B 进制表示时是回文数的数。

【输入】

共一行,一个单独的正整数 B。

【输出】

每行两个 B 进制的符合要求的数字,第二个数是第一个数的平方,且第二个数是回文数。

注意大于 9 的数,用字母表示。如用 A 表示 10,B 表示 11,用第 n 个大写字母表示 n+9。

【输入样例】

10

【输出样例】

1 12 43 911 12122 48426 676101 10201111 12321121 14641202 40804212 44944264 69696

【代码详解】

#include <bits/stdc++.h>using namespace std;int k, t;string s1, s2;string dtok(int t, int k)  // 十进制转k进制模板{    string ans = "";  // 定义空字符串    while (t>0) {  // 使用数位拆分思路,当t不为0时        int x = t % k;  // 除以k,得到k进制的余数        if (x<10) ans = char(x+'0') + ans;  // 拼接到ans字符串的前面(注意不是追加到后面)         else ans = char(x-10+'A') + ans;  // 对于大于10的,转为大写字母        t = t / k;  // 更新t为整数部分    }    if (ans.empty()) ans = "0";  // 特判t为0时,直接返回0    return ans;  // 返回拼接后的字符串}bool isPal(string s) {  // 回文字符串的判断    for (int i=0; i<s.size(); i++) {  // 从头开始遍历        if (s[i]!=s[s.size()-1-i]) { // 逐位比较,如果遇到不相等的,就返回false            return false;        }    }    return true;  // 遍历完还没false的就返回true}int main(){    cin >> k;  // 输入k(不用b是因为方便记忆十进制转k进制模板)    for (int i=1; i<=300; i++) {  // 从1遍历至300        t = i*i;  // 得到平方数        s1 = dtok(i, k);  // 将i转为B进制        s2 = dtok(t, k);  // 将平方数转为B进制        if (isPal(s2)) {  // 判断平方数(字符串)是否为回文数(字符串)            cout << s1 << " " << s2 << endl;  // 如果是,则打印B进制的i和平方数        }    }    return 0;}

【运行结果】

101 12 43 911 12122 48426 676101 10201111 12321121 14641202 40804212 44944264 69696

标签: #squares是什么意思怎么读