北理工乐学44. 判断二进制对称数

44. 判断二进制对称数

一个数的等于它的反序数,则为对称数,编程:从键盘输入一个大于0的正整数,判断其二进制表示是否为对称数,若是,输出“Yes!”,并输出该数和对应的二进制;否则,输出“No.”。 例如:

输入:5

输出:
Yes!
5=101

  测试输入 期待的输出 时间限制 内存限制 额外进程
测试用例 1 以文本方式显示
  1. 5↵
以文本方式显示
  1. Yes!↵
  2. 5=101↵
1秒 64M 0
测试用例 2 以文本方式显示
  1. 128↵
以文本方式显示
  1. No.↵
1秒 64M 0

 

代码如下:

#include <stdio.h>
#include <stdbool.h>
#include <string.h>
void to_binary(int n, char ch[]);
int main(void)
{
    /*读入整数n
    * 将n转为二进制binary_n
    *   用字符的形式储存二进制数,便于后续判断
    *   发现二进制的第一位是n%2,然后n = n/2;
    *   第二位n%2,继续 n = n/2;
    *   n==0时停止
    *   warning,其实还需要逆序,如果依照这个思路,但是如果是回文数,那么打印的时候正序逆序结果相同,因此省略
    * 判断这个二进制是不是对称数
    *   char[i] = char[len-1-i]
    *   i-->len/2-1;i<len/2
    *   以1221为例
    */
    int n;
    scanf("%d", &n);
    char ch[200] = { 0 };    
    to_binary(n, ch);
    int len = strlen(ch);   
    bool palindrome = true;
    for (int i = 0; i < len / 2; i++) 
        if (ch[i] != ch[len - 1 - i]) {
            palindrome = false;
            break;
        } 
    if (palindrome) {
        printf("Yes!\n"
            "%d=%s\n", n, ch);
    }
    else
        printf("No.\n");    
    return 0;
}
void to_binary(int n, char ch[])
{
    int i;
    for (i = 0; n!=0; i++) {
        ch[i] = (n % 2 ? '1':'0');
        n /= 2;
        //printf("i = %d, ch[%d] = %c, n = %d\n", i, i, ch[i], n);
    }    
    ch[i] = '\0';
    //printf("i = %d, ch[%d] = %c\n", i, i, ch[i]);
}

 

posted @ 2022-11-28 18:17  我千五可以  阅读(155)  评论(0)    收藏  举报