反转两次的数字

反转 一个整数意味着倒置它的所有位。

例如,反转 2021 得到 1202 。反转 12300 得到 321 ,不保留前导零 。
给你一个整数 num ,反转 num 得到 reversed1 ,接着反转 reversed1 得到 reversed2 。如果 reversed2 等于 num ,返回 true ;否则,返回 false。

今天给大家来个简单的,仔细看题我们就能发现要反转两次还能回到原来的数字的,个位一定不能为0,并且0也是反转两次的数字,所以我们能将数字分为两类,一个是0,一个是不为0的数,然后我们就可以对不为0的数开始判断它的个位是否为0,如果是的话,那么我们就能判断它不是反转两次的数字,如果不是的话就是反转两次的数字。

bool isSameAfterReversals(int num) {

    if (num == 0)

        return true;

    if (num % 10 == 0)

        return false;

    return true;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,这是一个比较具体的问题,需要结合具体的硬件和编程环境来回答。我假设你使用的是STC89C52单片机,那么以下是一个可能的程序实现: ```c #include <reg52.h> // 定义串口参数 #define BAUDRATE 9600 #define TIMER1_RELOAD_VALUE (65536 - FOSC / BAUDRATE / 12) // 定义硬件连接 sbit key = P3^3; // 按键 sbit led = P1^0; // LED 灯 sbit digit1 = P2^0; // 数码管1 sbit digit2 = P2^1; // 数码管2 sbit seg = P0; // 数码管段选 // 定义常量数组,存储数字 0~9 的数码管编码 const unsigned char SEG_TABLE[] = { 0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F }; // 定义变量 volatile unsigned char send_flag = 0; // 发送标志 volatile unsigned char send_data = 0; // 发送数据 volatile unsigned char recv_data = 0; // 接收数据 // 定时器T1中断服务程序,在此实现波特率发生器 void Timer1_ISR() interrupt 3 { TH1 = TIMER1_RELOAD_VALUE / 256; TL1 = TIMER1_RELOAD_VALUE % 256; if (send_flag) { SBUF = send_data; send_flag = 0; } } // 串口中断服务程序,在此接收数据 void Uart_ISR() interrupt 4 { if (RI) { RI = 0; recv_data = SBUF; } } // 初始化串口 void InitUart() { TMOD &= 0x0F; // 设置定时器T1为工作方式2 TMOD |= 0x20; TH1 = TIMER1_RELOAD_VALUE / 256; // 初始化波特率发生器 TL1 = TIMER1_RELOAD_VALUE % 256; TR1 = 1; // 启动定时器T1 SCON = 0x50; // 设置串口参数,允许接收 ES = 1; // 允许串口中断 EA = 1; // 允许总中断 } // 数码管显示函数 void Display(unsigned char num) { unsigned char digit1_code = SEG_TABLE[num / 10]; unsigned char digit2_code = SEG_TABLE[num % 10]; unsigned char i; for (i = 0; i < 50; i++) { // 数码管扫描周期 if (i < 25) { digit1 = 1; digit2 = 0; seg = digit1_code; } else { digit1 = 0; digit2 = 1; seg = digit2_code; } } } int main() { InitUart(); while (1) { if (key == 0) { // 检测按键 while (!key); // 等待按键释放 send_data = 0; send_flag = 1; // 开始发送数字 } if (recv_data >= '0' && recv_data <= '9') { // 接收到数字 led = !led; // 指示灯状态反转 Display(recv_data - '0'); // 数码管显示 } else if (recv_data == 13) { // 接收到回车符 recv_data = 0; // 清空接收缓存 } } } ``` 需要注意的是,以上程序仅作参考,具体实现可能需要根据你的硬件环境和具体需求进行调整。同时,接收到的数字只能是 0~9,如果需要支持更多的数字,需要额外编写转换函数。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值