进制回文串问题

                                                  问题 E: 回文数

时间限制: 1 Sec  内存限制: 32 MB
提交: 57  解决: 21
[提交][状态][讨论版][命题人:外部导入]

题目描述

我们把从左往右和从右往左念起来相同的数字叫做回文数。例如,75457就是一个回文数。
当然某个数用某个进制表示不是回文数,但是用别的进制表示可能就是回文数。
例如,17是用十进制表示的数,显然它不是一个回文数,但是将17用二进制表示出来是10001,显然在二进制下它是一个回文数。
现在给你一个用十进制表示的数,请你判断它在2~16进制下是否是回文数。

输入

输入包含多组测试数据。每组输入一个用十进制表示的正整数n(0<n<50000),当n=0时,输入结束。

输出

对于每组输入,如果n在2~16进制中的某些进制表示下是回文数,则输出“Number i is palindrom in basis ”,在后面接着输出那些进制。其中i用n的值代替,后面输出的进制中,每两个数字之间空一个。
如果n在2~16进制的表示下都不为回文数,则输出“Number i is not a palindrom”,其中i用n的值代替。

样例输入

17
19
0

样例输出

Number 17 is palindrom in basis 2 4 16
Number 19 is not a palindrom

思路:以后进制问题多用数字数组,少用字符数组,因为大于10的存不进去(这种情况是进制比较小的)。

代码:

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<string.h>
using namespace std;
const int maxn=50005;
int k[maxn],p[maxn];
int main()
{
	int a,b,i,j,n,m,len,s;
	while(scanf("%d",&a),a){
		s=0;
		for(i=2;i<=16;i++){
			int temp=a,len=0;
			do{
				k[len++]=temp%i;
				temp/=i;
			}while(temp!=0);
			int flag=1;
			for(n=0,j=len-1;n<len/2;n++){
				if(k[n]!=k[j--]){
					flag=0;
					break;
				}
		    }
		    if(flag) p[s++]=i;
		}
		if(s){
			printf("Number %d is palindrom in basis",a);
			for(int i=0;i<s;i++) printf(" %d",p[i]);
		}
		else printf("Number %d is not a palindrom",a);
		printf("\n");
	}
}

 

 

### Java实现二进制回文算法 为了实现一个判断给定是否为二进制回文的Java程序,可以按照以下逻辑编写代码。此方法涉及将整转换为其对应的二进制字符串形式,并验证该字符串是否与其反转版本相同。 #### 代码示例 以下是基于上述需求编写的Java代码: ```java import java.util.Scanner; public class BinaryPalindrome { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.print("请输入一个正整: "); int number = scanner.nextInt(); boolean isPalindrome = isBinaryPalindrome(number); if (isPalindrome) { System.out.println(number + " 的二进制表示是一个回文串."); } else { System.out.println(number + " 的二进制表示不是一个回文串."); } } private static boolean isBinaryPalindrome(int n) { String binaryString = Integer.toBinaryString(n); // 将整转为二进制字符串 [^1] StringBuilder reversedString = new StringBuilder(binaryString).reverse(); // 反转字符串 [^2] return binaryString.equals(reversedString.toString()); // 验证原字符串与反转后的字符串是否相等 [^3] } } ``` 这段代码实现了如下功能: - 用户输入一个正整。 - 使用`Integer.toBinaryString()`函将其转化为二进制字符串。 - 创建一个新的StringBuilder对象来存储这个二进制字符串并调用其`reverse()`方法得到反序的结果。 - 对比原始二进制字符串和它的反转结果,如果两者一致,则说明这是一个进制回文;否则不是。 #### 关于浙江大学课程的相关性 虽然这里提供的解决方案并未直接来源于特定大学的具体教材或讲义,但它体现了计算机科学教育中常见的主题之一:字符串操作以及基本的据处理技巧。这类问题通常会在诸如“据结构”或者“算法导论”的课程里讨论到[^4]。对于希望深入理解此类概念的学生来说,参与像ACM竞赛这样的活动能够提供丰富的实践机会[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值