1023. Have Fun with Numbers (20)
2016-02-23 10:08
357 查看
Notice that the number 123456789 is a 9-digit number consisting exactly the numbers from 1 to 9, with no duplication. Double it we will obtain 246913578, which happens to be another 9-digit number consisting exactly the numbers from 1 to 9, only in a different permutation. Check to see the result if we double it again!
Now you are suppose to check if there are more numbers with this property. That is, double a given number with k digits, you are to tell if the resulting number consists of only a permutation of the digits in the original number.
Input Specification:
Each input file contains one test case. Each case contains one positive integer with no more than 20 digits.
Output Specification:
For each test case, first print in a line “Yes” if doubling the input number gives a number that consists of only a permutation of the digits in the original number, or “No” if not. Then in the next line, print the doubled number.
Sample Input:
1234567899
Sample Output:
Yes
2469135798
Now you are suppose to check if there are more numbers with this property. That is, double a given number with k digits, you are to tell if the resulting number consists of only a permutation of the digits in the original number.
Input Specification:
Each input file contains one test case. Each case contains one positive integer with no more than 20 digits.
Output Specification:
For each test case, first print in a line “Yes” if doubling the input number gives a number that consists of only a permutation of the digits in the original number, or “No” if not. Then in the next line, print the doubled number.
Sample Input:
1234567899
Sample Output:
Yes
2469135798
#include<iostream> #include<string.h> using namespace std; int cnt[10]={0}; struct bign{ int d[30]; int len; bign(){ memset(d,0,sizeof(d)); len=0; } }; bign setbign(char str[]){ bign a; a.len=strlen(str); for(int i=0;i<a.len;i++){ a.d[i]=str[a.len-i-1]-'0'; } return a; } bign doub(bign a){ int r=0; for(int i=0;i<a.len||r!=0;i++){ a.d[i]=a.d[i]*2+r; r=0; while(a.d[i]>=10){ r++; a.d[i]-=10; } } for(int i=a.len;a.d[i]!=0;i++){ a.len++; } return a; } void print(bign a){ for(int i=a.len-1;i>=0;i--) cout<<a.d[i]; } int main(){ freopen("in.txt","r",stdin); char str[30]; cin>>str; bign a=setbign(str); bign b=doub(a); bool flag=true; for(int i=0;i<a.len;i++){ cnt[a.d[i]]++; cnt[b.d[i]]--; } if(a.len!=b.len) flag=false; else{ for(int i=0;i<10;i++) if(cnt[i]) flag=false; } if(flag){ printf("Yes\n"); } else printf("No\n"); print(b); return 0; }
相关文章推荐
- 矩阵链乘(动态规划)
- Swift-函数
- [Windows Server 2012] MySQL更改数据库引擎(MyISAM改为INNODB)
- Mac不能复制拷贝写入文件到移动硬盘/U盘解决办法
- 递归
- 默认通知QuickSettings的默认行数列数
- Linux下Tomcat重新启动
- PHP的异常处理、错误的抛出及错误回调函数
- RequireJS 2.0 新特性
- Android 实现闪屏页和右上角的倒计时跳转实例代码
- MySQL1236错误的解决方式
- linux经验总结
- 美国力登的最新KVM-Over-IP
- tools:context=".MainActivity的作用
- OpenWRT编译过程
- 内核源码树的构建2
- HTML 5基础 — 熟悉Canvas
- mybatis学习笔记
- Android破解锁屏密码(已root)
- 头像的上传02