|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 格瓦拉之剑 于 2013-5-2 14:40 编辑
- /*
- 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;
- }
复制代码
写了感觉没错,可是有时运行会崩溃,测试数据为2时程序错误。大家看看哪有问题
题目:回文数是指从左向右念和从右像做念都一样的数。如12321就是一个典型的回文数。 给定一个进制B(2<=B<=20十进制),输出所有的大于等于1小于等于300(十进制下)且它的平方用B进制表示时是回文数的数。用’A’,’B’……表示10,11等等。
|
|