#558. 回文平方(3月24日)

在这里插入图片描述
读题:1到300之间的平方转换为B进制,判断B进制下的数是不是回文数。
1.主要就是对数字进行进制转换,我最常用的就是短除发取余来转换,抓换为几进制就对几取余直到为o.

2.我第一想法就是用字符串来判断将我们取到的余数转换为字符连接起来,在这里题目要求大于9的数用ABC依次表示。在这当我们取余超过9时我们求超过的部分再往’A’字符上加就可以得到大于10所对应的字母了。

3.我们求得一个数的B进制后的字符串,我们就要用两个指针一个从前面开始遍历,另一个从结尾开始遍历,只要碰到不相等的就直接终止循环返回这个数不是回文数。走到最后都相同就是回文数。

#include <iostream>
#include <algorithm>

using namespace std;

char get(int x){
    if (x < 10) 
		return x + '0';
	else
    	return x-10+'A';
}
 
string duanchu(int n, int b){
    string s;
    while (n) {
        s += get(n % b);
        n /= b;
    }

    reverse(s.begin(), s.end());
    return s;
}

bool pd(string s){
    for (int i = 0, j = s.size()-1;i<j;i++,j--)
        if (s[i] != s[j])
            return 0;
    return 1;
}
int main(){
    int b;
    cin >> b;
    for (int i = 1; i <= 300; i ++ ){
    	int a = i*i;
        string s = duanchu(a, b);
        if (pd(s))
            cout << duanchu(i, b) << ' ' << s << endl;
    }
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值