您的位置:首页 > 其它

双基回文数

2014-01-24 16:32 225 查看

如果一个正整数n至少在两个不同的进位制b1、b2下都是回文数(2 <= b1, b2 <= 10),则称n为双基回文数(注意:回文数不能包含前导0)。输入正整数S < 10^6,输出比S大的最小双基回文数。

 

#include <cstdio>
#include <iostream>
#include <string.h>
#include <math.h>
using namespace std;
bool change(int n,int b)
{
char sum[100];
int i=0;
while(1)
{
if(n<b)
{sum[i++]='0'+n;sum[i]='\0'; break;}
sum[i++]=n%b+'0';
n/=b;
}
int l=strlen(sum);
int ok=1;
for(int j=0;j<l/2;j++)
{
if(sum[j]!=sum[l-j-1]) {ok=0;break;}
}
if(ok) return true;
return false;
}
bool solve(int s)
{
int num=0;
for(int i=2;i<=10;i++)
{
if(change(s,i)) num++;
if(num==2) return true;
}
return false;
}
int main()
{
int s;
scanf("%d",&s);
while(1)
{
s++;
if(solve(s)) break;
}
printf("%d\n",s );
return 0;

}

 

 先转化进制,再判断是否为回文

方法——枚举 

 注意事项:S转化为2进制时长度很长,所以应用数组储存。
总结:白皮书水题。。。但还是错了几遍。。。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  acm