日常zb:这OJ确实看运气的吗,之前抽到的题一点思路都没有,现在都轻轻松松(bushi
双重回文数
我自己分解为:
1. 回文数处理。
2. 连续进制转换。
3. 好像没了。
解决方法:
1. 我自己的做法喜欢空间换时间,准备两个等长数组。
然后将第一个数组存正序,另一个存逆序。
最后for循环比较每一项即可。
2.连续进制转换。因为进制转换过程都挺相同的。
所以封装成一个函数最简单。这里我运用了递归。
#include <bits/stdc++.h>
using namespace std;
bool trans(int,int,int);
int main()
{
int n,m;
cin>>n>>m;
bool flag;
for(int i=m+1,times=0;times<n;i++){//记得删除条件
flag = trans(i,2,0);
if(flag){
cout<<i<<endl;
times++;
}
}
return 0;
}
bool trans(int n,int st,int time){
//2的14次方=16384
int arr[15]={0};
int compare[15]={0};
int temp = n;
int i=1;
while(temp){
arr[i]=temp%st;
temp/=st;
i++;
}
for(int j=1;j<i;j++){
compare[i-j]=arr[j];
}
bool flag=1;
for(int j=1;j<i;j++){
if(compare[j]!=arr[j]){
flag =0;
break;
}
}
if(!flag&&st<10){
return trans(n,st+1,time);
}
else{
if(!flag){
return false;
}
time++;
if(time>=2){
return true;
}
else{
return trans(n,st+1,time);
}
}
}