洛谷P1206

题目传送门

思路:

1.转化、进行乘方和判断回文的顺序

由于在非十进制数上进行乘方比较困难,所以我们要先转化,再乘方,最后判断回文。

2.转化

不会转化的看这里

直接转化即可,注意特判十到十九的情况。

代码: 

string zhuan(int a,int jinzhi){
	string ans;
	while(a){
		int s=a%jinzhi;
		//cerr<<a<<" ";
		a/=jinzhi;
		if(s==10)ans='A'+ans;
		else if(s==11)ans='B'+ans;
		else if(s==12)ans='C'+ans;
		else if(s==13)ans='D'+ans;
		else if(s==14)ans='E'+ans;
		else if(s==15)ans='F'+ans;
		else if(s==16)ans='G'+ans;
		else if(s==17)ans='H'+ans;
		else if(s==18)ans='I'+ans;
		else if(s==19)ans='J'+ans;
		else ans=char(s+48)+ans;
	}
	return ans;
}

3.判断回文

由于本题中有十一到二十进制的数,所以判断回文时不能用int类型的数组,而要用string

代码:

for(int j=rns.length()-1;j>=0;j--){
			bns+=rns[j];
		}if(rns==bns){
			cout<<dns<<" "<<rns<<endl;
		}

完整代码:

#include<iostream>
#include<cstdio>
#include<cmath>
#include<iomanip>
#include<cstring>
#include<string>
#include<algorithm>
using namespace std;
int n;
string zhuan(int a,int jinzhi){
	string ans;
	while(a){
		int s=a%jinzhi;
		//cerr<<a<<" ";
		a/=jinzhi;
		if(s==10)ans='A'+ans;
		else if(s==11)ans='B'+ans;
		else if(s==12)ans='C'+ans;
		else if(s==13)ans='D'+ans;
		else if(s==14)ans='E'+ans;
		else if(s==15)ans='F'+ans;
		else if(s==16)ans='G'+ans;
		else if(s==17)ans='H'+ans;
		else if(s==18)ans='I'+ans;
		else if(s==19)ans='J'+ans;
		else ans=char(s+48)+ans;
	}
	return ans;
}int main(){
	cin>>n;
	for(int i=1;i<=300;i++){
		int ans=i*i;
		string dns=zhuan(i,n);
		string rns=zhuan(ans,n);
		string bns;
		for(int j=rns.length()-1;j>=0;j--){
			bns+=rns[j];
		}if(rns==bns){
			cout<<dns<<" "<<rns<<endl;
		}
	}
	return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值