北理工乐学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 @   我千五可以  阅读(133)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
点击右上角即可分享
微信分享提示