1261 Problem D-回文数-入门题-大数-C++实现
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了1261 Problem D-回文数-入门题-大数-C++实现,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2260字,纯文字阅读大概需要4分钟。
内容图文
![1261 Problem D-回文数-入门题-大数-C++实现](/upload/InfoBanner/zyjiaocheng/639/e90485101bc64c9e84250c248d4c8a5a.jpg)
问题 D: 回文数
时间限制: 1 Sec 内存限制: 32 MB
提交: 20 解决: 17
题目描述
我们把从左往右和从右往左念起来相同的数字叫做回文数。例如,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的值代替。
样例输入 copy
17 19 0
样例输出 copy
Number 17 is palindrom in basis 2 4 16 Number 19 is not a palindrom
补充
- 输入为0-50000,使用int存放而不用字符串
- 转化为10-16进制数,可能需要将每一数位转换为‘A’-‘F’
- 转化后的进制数可能比较长,需要用字符串表示
- 回文串判断
- 输出判断
代码
#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
#include <math.h>
#include <string.h>
using namespace std;
/*num,aa:存储输入的数
*a[17]:判断2-16进制数是否存在回文数
* arr[100]:存储对应进制数,字符表示
* temp:存放每一位运算的结果
* flag:判断存在回文数的标志
*/
int main(){
int num;//小于五万的非负整数,不用字符串存
int a[17];
char arr[100];
int j;
int length;
int temp;
int flag;
while(cin>>num){
int tt=0;
int aa=num;
if(num==0){
break;
}//特殊情况
for(int i = 2;i < 17;i++){//2-16进制测试
aa=num;//每轮用aa来换算进制
j=0;
flag=1;
for(int m = 0;m <100 ;m++){
arr[m]=0;
}//进制数存储
while(aa!=0){
temp=aa%i;//逐位
switch (temp)
{
case 10:
arr[j]='A';
break;
case 11:
arr[j]='B';
break;
case 12:
arr[j]='C';
break;
case 13:
arr[j]='D';
break;
case 14:
arr[j]='E';
break;
case 15:
arr[j]='F';
break;
default:
arr[j]='0'+temp;
break;
}
aa=aa/i;
j++;
}
arr[j]='\0';//必要
length=strlen(arr);
for(int l = 0;l <length/2 ;l++){//判断回文数
if(arr[l]!=arr[length-l-1]){
flag=0;
break;
}
}
a[i]=flag;
}
for(int i = 2;i < 17;i++){
if(a[i]==1){
tt=1;
break;
}
}//判断输出情况
cout<<"Number "<<num<<" is ";
tt==1?cout<<"palindrom in basis":cout<<"not a palindrom"<<endl;
if(tt==1){
for(int i = 2;i < 17;i++){
if(a[i]==1){
cout<<" "<<i;
}
}
cout<<endl;
}
}
return 0;
}
内容总结
以上是互联网集市为您收集整理的1261 Problem D-回文数-入门题-大数-C++实现全部内容,希望文章能够帮你解决1261 Problem D-回文数-入门题-大数-C++实现所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。