【模拟】洛谷 P1015 回文数
来源:互联网 发布:网络监控工调试 编辑:程序博客网 时间:2024/05/21 07:34
题目描述
若一个数(首位不为零)从左向右读与从右向左读都一样,我们就将其称之为回文数。
例如:给定一个10进制数56,将56加65(即把56从右向左读),得到121是一个回文数。
又如:对于10进制数87:
STEP1:87+78 = 165 STEP2:165+561 = 726
STEP3:726+627 = 1353 STEP4:1353+3531 = 4884
在这里的一步是指进行了一次N进制的加法,上例最少用了4步得到回文数4884。
写一个程序,给定一个N(2<=N<=10,N=16)进制数M(100位之内),求最少经过几步可以得到回文数。如果在30步以内(包含30步)不可能得到回文数,则输出“Impossible!”
输入输出格式
输入格式:
两行,分别是N,M。
输出格式:
STEP=ans
输入输出样例
输入样例#1:
10
87
输出样例#1:
STEP=4
代码
#include<iostream>#include<cstring>using namespace std;char a[110];int b[110],c[110],ans,step,n;bool judge(int k[],int len){ if(len%2==0) { int i=0,j=len-1; while(i<j) { if(k[i]!=k[j])return false; i++;j--; } return true; } if(len%2!=0) { int i=0,j=len-1,mid=(len-1)/2; while(i<mid&&j>mid) { if(k[i]!=k[j])return false; i++;j--; } return true; }}void change(int len){ for(int i=0;i<len;i++)c[len-i-1]=b[i];}void add(int len){ int x=0; for(int i=0;i<len;i++) {// cout<<b[i]<<' '<<c[i]<<' '<<x<<endl; b[i]=b[i]+c[i]+x;// cout<<b[i]<<' '<<x<<endl; x=b[i]/n; b[i]%=n;// cout<<b[i]<<' '<<x<<endl; } b[len]=x;len++; if(b[len-1]==0)len--;// for(int i=0;i<len;i++)cout<<b[i];// cout<<endl; step++; if(step>30) { cout<<"Impossible!"; return ; } if(judge(b,len)) { cout<<"STEP="<<step; return ; } else { change(len); add(len); } return ;}int main(){ cin>>n; scanf("%s",a); for(int i=strlen(a)-1;i>=0;i--) { if(n==16) { if(a[i]>='0'&&a[i]<='9'){b[strlen(a)-i-1]=a[i]-48;c[i]=a[i]-48;} if(a[i]>='A'&&a[i]<='Z'){b[strlen(a)-i-1]=a[i]-55;c[i]=a[i]-55;} } else {b[strlen(a)-i-1]=a[i]-48;c[i]=a[i]-48;} }// for(int i=0;i<strlen(a);i++)cout<<b[i];// cout<<endl;// for(int i=0;i<strlen(a);i++)cout<<c[i]; if(judge(c,strlen(a))) { cout<<"STEP=0"; return 0; } add(strlen(a)); return 0;}
0 0
- 【模拟】洛谷 P1015 回文数
- 洛谷P1015回文数
- luogu P1015 回文数
- 【模拟】【RQNOJ】回文数
- P1015
- noip1999 回文数 (模拟)
- 蓝桥杯 回文数(模拟)
- ACM [NOIP1999] 回文数(水模拟)
- 1282 回文数猜想【简单模拟】
- HDU1282 回文数猜想 (简单模拟)
- luogu1015 回文数 【1999提高】(模拟+高精)
- 洛谷 P1609 最小回文数
- 洛谷 U3348 A2-回文数
- 回文回文数 HUST
- 回文数&&回文串
- 回文数
- 回文数
- 回文数
- How to send pull request on Git
- spark厦大---MLlib基本数据类型(2)
- 【模拟】洛谷 P1014 Cantor表
- Scala浅谈
- 让两个用户同时远程登陆XP的实现方法
- 【模拟】洛谷 P1015 回文数
- 【DP】洛谷 P1018 乘积最大
- Android在TextView中显示html标签以及异步加载网页图片
- 【DP】洛谷 P1020 导弹拦截
- 【BZOJ 4819】【SDOI 2017】新生舞会
- JavaScript中的split函数中的正则表达式
- rabbitMQ 知识点
- 【分治】洛谷 P1024 一元三次方程求解
- 在自绘的CLsitCtrl控件单元格内添加Combobox控件