题目描述
一个数字如果从前往后读和从后往前读都完全一样,那么这个数就是回文数。
例如,1234321 就是一个回文数。
所有的一位数字都是回文数。
我们一般都是在十进制下考虑回文,但是回文这一概念也可以应用于其他进制下的数字中。
一个整数 N,在 b 进制下,共有 k+1 位,其中第 i 位的数字为 ai,(0≤i≤k),那么 N=∑ki=0(aibi)。
一般来说,0≤ai<b,并且 ak≠0。
如果对于任意 i,满足 ai=ak−i,那么 N 在 b 进制下就是一个回文数。
0 在任何进制下都表示为 0,且都视为是一个回文数。
现在给定一个整数 N,请你判断它在 b 进制的表示下,是否是一个回文数。
输出格式
输出共两行。
如果 N 在 b 进制下是回文数,则第一行输出 Yes,否则输出 No。
第二行,输出 N 在 b 进制下的表示,包含 k+1 个整数,要求按顺序输出 ak,ak−1,…,a0,整数之间用空格隔开。
样例
输入样例1:
27 2
输出样例1:
Yes
1 1 0 1 1
输入样例2:
121 5
输出样例2:
No
4 4 1
算法1
题⽬⼤意:给出两个整数a和b,问⼗进制的a在b进制下是否为回⽂数。是的话输出Yes,不是输出
No。并且输出a在b进制下的表示,以空格隔开
分析:将a转换为b进制形式,保存在int的数组⾥⾯,⽐较数组左右两端是否对称。
注意:如果是0,要输出Yes和0
C++ 代码
#include<bits/stdc++.h>
using namespace std;
bool isHW(int z[],int num)
{
for(int i=0;i<num/2;i++)
if(z[i]!=z[num-1-i])
return false;
return true;
}
int main()
{
int z[40];int num=0;
int n,b;
cin>>n>>b;
while(n)
{
z[num++]=n%b;
n/=b;
}
bool flag=isHW(z,num);
if(flag==true)cout<<"Yes"<<endl;
else cout<<"No"<<endl;
for(int i=num-1;i>=0;i--)
{
cout<<z[i];
if(i)cout<<" ";
}
if(num==0)
printf("0");
return 0;
}