top1编程
← 返回题目
题解

【基础】乐乐的数

1 条题解

  • 0
    @ 2026-7-29 0:19:31
    #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]='&#92;0';//清空a数组,用作下一个进制
    	}
    	cout<<ans<<endl;
    	for(int i=0;i<=l;i++) cout<<o[i]<<endl;
    	return 0;
    }
    
    • 1