A1019 General Palindromic Number (20 分| 回文数,附详细注释,逻辑分析)

写在前面

  • 思路分析
    • 给出两个整数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 
    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 
    #include 
    #include 
    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;
    }
    

你可能感兴趣的:(PAT(甲级),算法比赛相关,A1019,General,Palindromic,Number,回文数,测试点2,测试点4)