usaco.section1.2.Palindromic Squares

判断 1 - 300 (十进制)之间,其平方数在 k 进制下为回文串的数,输出其在 k 进制下的结果,和其平方在 k 进制下的结果

#include <cstdio>

using namespace std;

int k;
char code[26] = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'};

int main()
{
	freopen("palsquare.in", "r", stdin);
	freopen("palsquare.out", "w", stdout);
	scanf("%d", &k);
	for(int i = 1; i <= 300; i ++){
		int s = i * i, tot2 = 0; char b[20];
		int t = s;
		while(t){
			int p = t % k;
			if(p < 10) b[++ tot2] = (char)p + 48;
				else b[++ tot2] = code[p - 10];
			t /= k;
		}
		bool ok = 1;
		for(int j = tot2; j >= 1; j --){
			if(b[j] != b[tot2 - j + 1]) { ok = 0; break; }
		}
		if(!ok) continue;
		else{
			char a[20]; int tot = 0; t = i;
			while(t){
				int p = t % k;
				if(p < 10) a[++ tot] = (char)p + 48;
					else a[++ tot] = code[p - 10];
				t /= k;
			}
			for(int i = tot; i >= 1; i --) printf("%c", a[i]); printf(" ");
			for(int i = tot2; i >= 1; i --) printf("%c", b[i]); printf("\n");
		}
	}
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值