题解
【基础】乐乐的数
1 条题解
-
0
#include<iostream> #include<cstring> using namespace std; long long x,o[100],l=-1; char a[100000]; int ans; bool huiwen(char a[])//定义一个判断回文的函数,判断a[],是回文返回true,反之。 { int i=0,j=strlen(a)-1;//定义两个变量,i是从左往右,j是从右往左 int len=strlen(a);//获取a的长度 for(int l=1;l<=len/2;l++) { if(a[i]!=a[j]) return false;//如果不是回文(从左往右和从右往左不一样)返回false i++;//往右一位数 j--;//往左一位数 } return true;//如果都一样(都不是不一样)返回true } void jinzhi(long long w,long long y)//将x变为i进制数存到a数组 { int x=0,k=0;//w存每次余数,k是a数组坐标。 //因为a数组是全局变量,函数中可以改变 while(w>0) { x=w%y;//取余 if(x<10) a[k]=char(x+48);//如果目前余数是一位数,可以用数字存到a中 else a[k]=char(x-10+65);//如果目前余数是两位数,要变成大写字母,-10+65是自己想的 k++;//下标++ w/=y;//短除 } } int main() { cin>>x; for(long long i=2;i<=36;i++)//循环2~36 { jinzhi(x,i);//存转换完的进制a[] if(huiwen(a)==true)//若a[]是回文数 { ans++;//答案数++ o[++l]=i;//存答案进制 } for(int t=0;t<=9999;t++) a[t]='\0';//清空a数组,用作下一个进制 } cout<<ans<<endl; for(int i=0;i<=l;i++) cout<<o[i]<<endl; return 0; }
- 1