1.2.4 Palindromic Squares 回文平方数

1.2.4 Palindromic Squares 回文平方数

时间: 1ms        内存:64M

描述:

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

给定一个进制B(2<=B<=20,由十进制表示),输出所有的大于等于1小于等于300(十进制下)且它的平方用B进制表示时是回文数的数。用’A’,’B’……表示10,11等等。

输入:

共一行,一个单独的整数B(B用十进制表示)。

输出:

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

示例输入:

10 

示例输出:

1 1
2 4
3 9
11 121
22 484
26 676
101 10201
111 12321
121 14641
202 40804
212 44944
264 69696

提示:

参考答案(内存最优[752]):

#include<stdio.h>
#include<string.h>
int change(int n,int base,char str[])
{
	int i=0;
	while(n){
		str[i]=n%base;
		if(str[i]<10)
			str[i]+='0';
		else
			str[i]=str[i]-10+'A';
		i++;
		n=n/base;
	}
	str[i]=0;
	return 1;
}
int judge(char str[])
{
	int n=strlen(str),i;
	for(i=0;i<n/2;i++)
		if(str[i]!=str[n-i-1])
			return 0;
	return 1;
}
int main()
{
	int n;
	while(scanf("%d",&n)==1){
		int i;
		char str[1000]={0},c[1000]={0};
		for(i=1;i<=300;i++)
			if(change(i,n,c)&&change(i*i,n,str)&&judge(str)){
				int len=strlen(c);
				while(len--)
					printf("%c",c[len]);
				printf(" %s\n",str);
			}
	}
	return 0;
}

参考答案(时间最优[0]):

#include <iostream>
#include <cstring>
#include <string.h>
using namespace std;

int b,n;
int i,j,k,r;
int a[50],a2[50];

void zhuanhuan(int a[50],int n)
{
	int m1,c1;
	c1=n;
	j=0;
	while(c1>0)
	{
		m1=n%b;
		//cout<<"haha..."<<endl;
		a[j]=m1;
		j++;
		c1=n/b;
		n=n/b;
	}
}


int main()
{
	cin>>b;
	for(k=1;k<=300;k++)
	{
		for(i=0;i<50;i++)
		{
			a[i]=-1;
			a2[i]=-1;
		}
		int bool1=1;
		n=k*k;
		zhuanhuan(a,n);
		int len=0;
		for(int t=0;a[t]>=0;t++)
			len++;
		//cout<<" len= "<<len<<endl;
		for(i=0;i<len/2;i++)
		{
			if(a[i]!=a[len-1-i])
			{
				bool1=0;
				break;
			}
		}
		if(bool1==1)
		{
			zhuanhuan(a2,k);
			int len2=0;
			for(int t1=0;a2[t1]>=0;t1++)
				len2++;
			for(int t2=len2-1;t2>=0;t2--)
			{
				if(a2[t2]>=10)
				{
					switch(a2[t2])
					{
					case 10:cout<<"A";
								break;
					case 11:cout<<"B";
								break;
					case 12:cout<<"C";
								break;
					case 13:cout<<"D";
								break;
					case 14:cout<<"E";
								break;
					case 15:cout<<"F";
								break;
					case 16:cout<<"G";
								break;
					case 17:cout<<"H";
								break;
					case 18:cout<<"I";
								break;
					case 19:cout<<"J";
								break;
					}
				}
				else
					cout<<a2[t2];

			}
			cout<<" ";
			for(r=0;r<len;r++)
			{
				if(a[r]>=10)
				{
					switch(a[r])
					{
					case 10:cout<<"A";
								break;
					case 11:cout<<"B";
								break;
					case 12:cout<<"C";
								break;
					case 13:cout<<"D";
								break;
					case 14:cout<<"E";
								break;
					case 15:cout<<"F";
								break;
					case 16:cout<<"G";
								break;
					case 17:cout<<"H";
								break;
					case 18:cout<<"I";
								break;
					case 19:cout<<"J";
								break;
					}
				}
				else
					cout<<a[r];
			}
			cout<<endl;
		}
	}

	return 0;
}

题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。

点赞

发表评论

电子邮件地址不会被公开。必填项已用 * 标注