44. 判断二进制对称数
一个数的等于它的反序数,则为对称数,编程:从键盘输入一个大于0的正整数,判断其二进制表示是否为对称数,若是,输出“Yes!”,并输出该数和对应的二进制;否则,输出“No.”。 例如:
输入:5
输出:
Yes!
5=101
测试输入 | 期待的输出 | 时间限制 | 内存限制 | 额外进程 | |
---|---|---|---|---|---|
测试用例 1 | 以文本方式显示
|
以文本方式显示
|
1秒 | 64M | 0 |
测试用例 2 | 以文本方式显示
|
以文本方式显示
|
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]);
}
标签:二进制,44,北理工,char,乐学,对称,Yes,include From: https://www.cnblogs.com/alien-han/p/16932986.html