gpt4 book ai didi

c++ - 使用移位位的问题(检查二进制数是否为回文)

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:02:26 25 4
gpt4 key购买 nike

我需要有关检查二进制数是否为回文的代码的帮助。假设输入是 21 (10101)。在我这样做的功能中:

-将num1的值复制到num2

-现在 num1 是 00010101,num2 是 00010101

-shift(right) num1 的位 while num1>0

-现在 num1 是:00000000|10101000,num2 是 00010101|00000000

-仅将 num1 的位移位(左)一个位置

-现在 num1 是:00000001|01010000,num2 是 00010101|00000000

-现在当 num1 != num2 我比较位并左移 num1,右移 num2,每个循环。

-比较示例:

00000001|01010000

00010101|00000000
|
V
1==1

下一个循环比较是0==0

所以我的代码如下。我有一个问题,因为我不知道如何停止最后一次(while 条件:num1!=num2 && flag==true)。显然我写的条件不是正确的方法。但我不知道该怎么做。在这种特定情况下,如果它检查 5 位数,我想停止它。然后我想问一下我做的解法是不是太难了,有没有其他方法可以解决这个问题(ps:我觉得难很正常?因为我想解决它手动将十进制数转换为二进制使用 while (n>0) -> n%2,而不是记住数组中的位,然后在数组上做一个简单的算法来检查反向;但现在我想使用 << 和 >> 运算符重做这个问题).谢谢大家。

#include <iostream>

using namespace std;

int palindrome(unsigned short);

int main()
{
unsigned short num;

cout << "Inserisci un numero:\t";
cin >> num;

if (palindrome(num) == 1)
cout << "Palindrome" << endl;
else
cout << "Not palindrome" << endl;

cout << "\a";
return 0;
}

int palindrome(unsigned short num1)
{
unsigned short num2 = num1;
bool flag = true;

while (num1>0)
{
num1 >>= 1;
}

num1 <<= 1;

while ((num1 != num2) && (flag == true))
{
if ((num1 & 1) != (num2 & 1))
{
flag = false;
break;
}

num1 <<= 1;
num2 >>= 1;
}

return flag;
}

最佳答案

您提供的解决方案似乎很复杂。
我会建议一种朴素方法,您只需从整数的两端开始逐位迭代。
只要这些位状态有差异,就可以断定它不是回文。
如果到达整数的中间,那么我们可以断定它是一个回文。

#include <stdio.h>
#include <stdbool.h>

bool
palindrome(unsigned short num)
{
int bit_count=8*(int)sizeof(num);
int half_bit_count=bit_count/2;
for(int i=0; i<half_bit_count; ++i)
{
bool low=(num&(1u<<i))!=0;
bool high=(num&(1u<<(bit_count-1-i)))!=0;
if(low!=high)
{
return false;
}
}
return true;
}

int
main(void)
{
unsigned short i1=0x00A0;
unsigned short i2=0x05A0;
unsigned short i3=0xA005;
unsigned short i4=0x005A;
printf("%hx --> %d\n", i1, palindrome(i1));
printf("%hx --> %d\n", i2, palindrome(i2));
printf("%hx --> %d\n", i3, palindrome(i3));
printf("%hx --> %d\n", i4, palindrome(i4));
return 0;
}

关于c++ - 使用移位位的问题(检查二进制数是否为回文),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57123257/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com