写在前面

  • 思路分析
  • 给出两个整数a和b,问十进制的a在b进制下是否为回文数
  • 是输出Yes,不是输出No
  • 并且输出a在b进制下的表示,以空格隔开
  • 将a转换为b进制形式,保存在int的数组⾥面,比较数组左右两端是否对称。
  • 注意:如果是0,要输出Yes和0
  • string存char字符,最高127,如果超过127自动模128。所以只能用int数组
  • 思路分析2
  • 思路存在坑!!!
  • 进制转换,字符串拼接
  • 翻转一致为回文
  • 题目简单,10分钟a题目

测试用例

input:
27 2
output:
Yes
1 1 0 1 1

intput:
121 5
output:
No
4 4 1

ac代码

#include <cstdio>
using namespace std;
int main()
{
int a, b;
scanf("%d %d", &a, &b);
int arr[40], inx = 0;
while(a != 0)
{
arr[inx ++] = a % b;
a = a / b;
}
int flag = 0;
for(int i = 0; i < inx / 2; i++)
{
if(arr[i] != arr[inx -i-1])
{
printf("No\n");
flag = 1;
break;
}
}
if(!flag) printf("Yes\n");
for(int i = inx - 1; i >= 0; i--)
{
printf("%d", arr[i]);
if(i != 0) printf(" ");
}
if(inx == 0)
printf("0");
return 0;
}
  • 测试点2/4错误
#include <cstdio>
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
int a, b;
scanf("%d %d", &a, &b);
string ss = "", res_ss = "";
ss += a % b + '0';
a = a / b;
while(a != 0)
{
ss += "-";
ss += (a % b + '0');
a = a / b;
}
res_ss = ss;
reverse(res_ss.begin(), res_ss.end());
ss.compare(res_ss)==0 ? printf("Yes\n") : printf("No\n");
cout << res_ss;

return 0;
}