每日一题(5)回文平方!

1.题目:

 2.思路:

题目意思的将1-300的整数(i)的平方转换成B进制的,看转换之后的数是否是回文数,是回文数就输出这个整数(i)转换成B进制后的形式;若不是直接忽略。上代码!

3.代码:

#include<iostream>
#include<vector>
using namespace std;

int n,ans1,ans2,num;//ans1用来记录i*i;ans2记录i
char a[20],c[20];//a[20]记录一个整数转换成B进制时每一次整除取余的数;
char b[20]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','G','H','I','J'}; 
//b[20]表示每次整除取余的结果;比如,取余之后为10,对应的就是a[10]='A',a[8]='8';
int main()
{
	cin>>n;
	for(int i=1;i<=300;i++){
		ans1=i*i;//ans1记录i*i
		int st=0;//判断是否为回文数
		int x=0;//记录i*i转换之后有多少个字符;
		while(ans1){//转换成B进制,每一次都先取余,然后整除,达到转换效果;
			a[x++]=b[ans1%n];//每一次整除取余对应的字符;
			ans1/=n;
		}
		for(int j=0;j<x;j++){//遍历从一个字符到最后一个字符;
			if(a[j]!=a[x-j-1]){//如果前面和后面对称的位置出现了不相等,就不是回文数,标记为1;
                                //否则就是回文数;st=0;
				st=1;
                break;
			}
		}
		if(st==0){//如果是回文数;我们要先输出i转换成B进制后的形式,再输出i*i转换成B进制之后的
                   //形式
			int num=0;//记录i转换成B进制之后有几个字符;
			ans2=i;//ans2记录i;
			while(ans2){//进制转换,和上面原理一样
				c[num++]=b[ans2%n];
				ans2/=n;
			}
			for(int l=num-1;l>=0;l--){
				cout<<c[l];//从后往前输出;进制转化倒序取余拼在一起;不懂可去查一下怎么进制转换
			}
			cout<<' ';//题目要求
			for(int k=0;k<x;k++){//因为上面就已经求过回文数,所以直接输出,因为是回文数,
                                   //从前往后和从从后往前都一样
				cout<<a[k];
			}
			cout<<endl;
		}
		
	}
	return 0;
 } 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值