双基回文数
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进制时长度很长,所以应用数组储存。
总结:白皮书水题。。。但还是错了几遍。。。
如果一个正整数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进制时长度很长,所以应用数组储存。
总结:白皮书水题。。。但还是错了几遍。。。
相关文章推荐
- 简单的四则运算
- 数的奇偶性
- 1272 小希的迷宫
- 1272 小希的迷宫
- hdu 1250 大数相加并用数组储存
- 求两个数的最大公约数【ACM基础题】
- 打印出二进制中所有1的位置
- 杭电题目---一只小蜜蜂
- zoj3549 快速幂
- 浅谈manacher算法 最长回文子串(Longest Palindromic Substring)
- NWERC2010 NKOJ2178 Stock Prices
- 2011ACM福州网络预选赛B题 HDU4062 Abalone
- Codeforces Round #197 (Div. 2)
- Codeforces Round #198 (Div. 1)
- POJ挑战赛3(POJ Challenge Round 3)题解
- ACM常用算法
- 2013 Multi-University Training Contest 1
- ACM/ICPC需要掌握的知识[转载]
- 北大—1006——Biorhythms
- ZOJ Problem Set - 1711 解题报告