PAT (Advanced Level) 1024. Palindromic Number (25)
2016-05-17 21:21
453 查看
手动模拟加法高精度。
注意:如果输入数字的就是回文,这个时候输出0步。
注意:如果输入数字的就是回文,这个时候输出0步。
#include<iostream> #include<cstring> #include<cmath> #include<algorithm> #include<cstdio> #include<map> #include<queue> #include<vector> using namespace std; char s[120],t[120],c[120]; int tep; void f(char *x) { int len=strlen(x); for(int i=0; i<len/2; i++) swap(x[i],x[len-i-1]); } bool work() { strcpy(t,s); f(t); int k=0; int len=strlen(s); int num1,num2; memset(c,0,sizeof c); for(int i=0; i<=len; i++) { if(s[i]==0) num1=num2=0; else num1=s[i]-'0',num2=t[i]-'0'; c[i]=(num1+num2+k)%10+'0'; k=(num1+num2+k)/10; } if(c[len]=='0') c[len]=0; f(c); int lenc=strlen(c); for(int i=0; i<lenc; i++) if(c[i]!=c[lenc-i-1]) return 0; return 1; } int main() { memset(s,0,sizeof s); memset(t,0,sizeof t); scanf("%s",s); scanf("%d",&tep); int sz=strlen(s); bool fail=0; for(int i=0; i<sz; i++) if(s[i]!=s[sz-i-1]) fail=1; if(fail==0) { printf("%s\n",s); printf("%d\n",0); } else { bool flag=0; for(int i=1; i<=tep; i++) { if(work()) { printf("%s\n",c); printf("%d\n",i); flag=1; break; } strcpy(s,c); } if(flag==0) { printf("%s\n",c); printf("%d\n",tep); } } return 0; }
相关文章推荐
- [Javascript] Logging Pretty-Printing Tabular Data to the Console
- 纸上得来终觉浅
- ZOJ 3329 One Person Game 概率dp
- 专题三Problem—1015
- 第三方Android 模拟器流畅速度快,适合开发人员
- jQuery UI -- widgets各种部件的使用
- Scrum 项目4.0
- 【C语言】实现Linux下的who命令
- 3递归丑数
- 链表的基本操作
- Java基础第八天听课总结(2)--多线程&Thread
- 文本编辑器
- javaweb之压缩过滤器
- 点击Android webview的链接,屏蔽其它浏览器,只是在原来的webview中跳转
- 纸张概率/期望题
- 浅谈yum源的配置
- 数据库慢了怎么办
- HDU 1869 六度分离(迪杰斯特拉/优先队列/最短路)
- 【LeetCode】165. Compare Version Numbers 解题报告
- 博客一周年!