如何编写一个检测二进制数是否为回文的程序?

更新于
2026-10-04 00:39:37
1阅读来源:SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计585个文字,预计阅读时间需要3分钟。

题目:1009-回文数_模拟、枚举、贪心(nowcoder.com)

解题关键在于将不同进制的数转换为十进制,并判断其是否为回文数。具体步骤如下:

1. 输入一个非负整数n,表示需要判断的数的范围。

2.从1到n,对每个数进行以下操作:

a. 将该数转换为十进制。 b. 判断该数是否为回文数。 c. 如果是回文数,输出该数。

转换方法:- 对于任意进制数,可以将其表示为:`d[n] * b^n + d[n-1] * b^(n-1) + ... + d[0] * b^0`,其中`d[i]`为该数的第i位数字(从右到左,从0开始计数),`b`为进制基数。

判断回文数:- 将十进制数转换为字符串,然后从两头开始向中间遍历,比较对应位置的字符是否相同。如果所有对应位置的字符都相同,则该数为回文数。

示例代码(Python):

pythondef is_palindrome(num): s=str(num) return s==s[::-1]

def convert_to_decimal(num, base): decimal=0 while num > 0: decimal=decimal * base + num % 10 num //=base return decimal

n=int(input())for i in range(1, n + 1): if is_palindrome(convert_to_decimal(i, 10)): print(i)

注意:此代码仅作为示例,实际使用时可能需要根据题目要求进行修改。

1009-[NOIP1999]回文数_2021秋季算法入门班第一章习题:模拟、枚举、贪心 (nowcoder.com)

这道题的关键就是把不同进制的变成十进制的

#include<iostream> #include<cstring> using namespace std; int main() { int n; scanf("%d",&n); string str; cin>>str; //进制转换 long long m=0; for(int i=0;i<str.size();i++)//把一个不同进制的数变成十进制的 { if(str[i]>'9') //对于一位数,十进制的数没有大于9的,那就是其他进制的,比如十六进制0A m=m*n+str[i]-'A'+10;//10进制以上 else m=m*n+str[i]-'0'; } for(int i=0;i<30;i++) { long long x=m,y=0; while(x)//判断回文串,可以用这个方法 { y=y*n+x%n; x/=n; } if(y==m) { cout<<"STEP="<<i; return 0; } m+=y; } cout<<"Impossible!"; return 0; }

Code over!

本文共计585个文字,预计阅读时间需要3分钟。

题目:1009-回文数_模拟、枚举、贪心(nowcoder.com)

解题关键在于将不同进制的数转换为十进制,并判断其是否为回文数。具体步骤如下:

1. 输入一个非负整数n,表示需要判断的数的范围。

2.从1到n,对每个数进行以下操作:

a. 将该数转换为十进制。 b. 判断该数是否为回文数。 c. 如果是回文数,输出该数。

转换方法:- 对于任意进制数,可以将其表示为:`d[n] * b^n + d[n-1] * b^(n-1) + ... + d[0] * b^0`,其中`d[i]`为该数的第i位数字(从右到左,从0开始计数),`b`为进制基数。

判断回文数:- 将十进制数转换为字符串,然后从两头开始向中间遍历,比较对应位置的字符是否相同。如果所有对应位置的字符都相同,则该数为回文数。

示例代码(Python):

pythondef is_palindrome(num): s=str(num) return s==s[::-1]

def convert_to_decimal(num, base): decimal=0 while num > 0: decimal=decimal * base + num % 10 num //=base return decimal

n=int(input())for i in range(1, n + 1): if is_palindrome(convert_to_decimal(i, 10)): print(i)

注意:此代码仅作为示例,实际使用时可能需要根据题目要求进行修改。

1009-[NOIP1999]回文数_2021秋季算法入门班第一章习题:模拟、枚举、贪心 (nowcoder.com)

这道题的关键就是把不同进制的变成十进制的

#include<iostream> #include<cstring> using namespace std; int main() { int n; scanf("%d",&n); string str; cin>>str; //进制转换 long long m=0; for(int i=0;i<str.size();i++)//把一个不同进制的数变成十进制的 { if(str[i]>'9') //对于一位数,十进制的数没有大于9的,那就是其他进制的,比如十六进制0A m=m*n+str[i]-'A'+10;//10进制以上 else m=m*n+str[i]-'0'; } for(int i=0;i<30;i++) { long long x=m,y=0; while(x)//判断回文串,可以用这个方法 { y=y*n+x%n; x/=n; } if(y==m) { cout<<"STEP="<<i; return 0; } m+=y; } cout<<"Impossible!"; return 0; }

Code over!