PAT乙级练习题B1019.数字黑洞
2016-06-29 18:50
267 查看
题目描述
给定任一个各位数字不完全相同的4位正整数,如果我们先把4个数字按非递增排序,再按非递减排序,然后用第1个数字减第2个数字,将得到一个新的数字。一直重复这样做,我们很快会停在有“数字黑洞”之称的6174,这个神奇的数字也叫Kaprekar常数。例如,我们从6767开始,将得到
7766 - 6677 = 1089
9810 - 0189 = 9621
9621 - 1269 = 8352
8532 - 2358 = 6174
7641 - 1467 = 6174
… …
现给定任意4位正整数,请编写程序演示到达黑洞的过程。
输入格式:
输入给出一个(0, 10000)区间内的正整数N。
输出格式:
如果N的4位数字全相等,则在一行内输出“N - N = 0000”;否则将计算的每一步在一行内输出,直到6174作为差出现,输出格式见样例。注意每个数字按4位数格式输出。
输入样例1:
6767
输出样例1:
7766 - 6677 = 1089
9810 - 0189 = 9621
9621 - 1269 = 8352
8532 - 2358 = 6174
输入样例2:
2222
输出样例2:
2222 - 2222 = 0000
注意
lambda中如果{return a>=b;}会报编译错误;还有注意使用do while结构,因为如果输入6174就会跳过循环体,是错误的,所以使用循环体都要求考虑直接跳过循环体的情况。
代码
#include<iostream> #include<vector> #include<algorithm> using namespace std; int main() { int N,temp; vector<int> N_vec(4); cin >> N; temp = N; int N1, N2; do { temp = N; for (int i = 0; i < 4; ++i) { N_vec[i] = temp % 10; temp /=10 ; } sort(N_vec.begin(), N_vec.end(), [](int a, int b) { return a > b; }); N1 = 1000 * N_vec[0] + 100 * N_vec[1] + 10 * N_vec[2] + N_vec[3]; sort(N_vec.begin(), N_vec.end(), [](int a, int b) { return a < b; }); N2 = 1000 * N_vec[0] + 100 * N_vec[1] + 10 * N_vec[2] + N_vec[3]; N = N1 - N2; printf("%04d - %04d = %04d", N1, N2, N); cout << endl; } while (N != 6174 && N != 0); system("pause"); return 0; }
相关文章推荐
- Jquery的each遍历数据组成JSON
- C++如何输出特定格式浮点数
- java 数据库连接的几个步骤
- 个人的新站 liujie.xin 上线,欢迎到访
- 360度全景图像制作
- 【2016Esri全球用户大会主题亮点】GIS is Getting Smarter——JACK主题演讲权威解读
- 简单易学的机器学习算法——马尔可夫链蒙特卡罗方法MCMC
- JAVA的数组和输入
- react_native 教程.
- JavaSE 基础 第39节 接口的应用
- PHP使用php-resque库配合Redis实现MQ消息队列的教程
- 网红魏道道为何不做直播:仇富心理到底扇了谁的脸?
- Zookeeper常用命令
- Android之focusable的使用
- MySQL配置文件详解
- HDU 1257 vector。。。
- H264 视频文件 帧格式
- 安装solidity遇见的问题——unused variable 'returned'
- js图片前端预览之 filereader 和 window.URL.createObjectURL
- FTP的主动模式与被动模式