/*
ID:azurefa2
LANG:C++
PROG:palsquare
*/
#include<iostream>
#include<string.h>
#include<stdio.h>
using namespace std;
bool function1(char* number); //判断回文
char* function2(int number,int system); //进制转换
char function3(int number); //数字转换字符
int main()
{
int n,i;
char *a,*b;
scanf("%d",&n);
for(i = 1;i <= 300;i++)
if(function1(function2(i*i,n)))
{
a = function2(i,n) ;
b = function2(i*i,n) ;
cout<<a<<" "<<b<<"\n";
delete[] a;
delete[] b;
}
return 0;
}
bool function1(char* number)
{
int length = strlen(number);
int i;
if(length%2 == 0)
{
for(i = 0;i <= length/2-1;i++)
{
if(number[i] != number[length-1-i])
return false;
}
return true;
}
else
{
for(i = 0;i <=(length-1)/2-1;i++ )
{
if(number[i] != number[length-i-1])
return false;
}
return true;
}
}
char* function2(int number,int system)
{
char *a = new char[20];
int i = 0,sum = number,length;
for(i = 0;i <20 ;i++)
a[i] = 61;
length = strlen(a);
for(i = 0;sum != 0;i++)
{
a[length-1-i] = function3(sum%system);
sum = (sum-sum%system)/system;
}
for(i = 0;a[i] == 61;i++)
;
return a+i;
}
char function3(int number)
{
if(number<10)
return number+48;
else
return 55+number;
}
题目:回文数是指从左向右念和从右像做念都一样的数。如12321就是一个典型的回文数。
给定一个进制B(2<=B<=20十进制),输出所有的大于等于1小于等于300(十进制下)且它的平方用B进制表示时是回文数的数。用’A’,’B’……表示10,11等等。
感觉写的没错,有时候运行正确,有时候崩溃,哪里有问题啊