PAT1019~~~

来源:互联网 发布:github mac客户端下载 编辑:程序博客网 时间:2024/06/16 23:29

1019. 数字黑洞 (20)

时间限制
100 ms
内存限制
65536 kB
代码长度限制
8000 B
判题程序
Standard
作者
CHEN, Yue

给定任一个各位数字不完全相同的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 = 10899810 - 0189 = 96219621 - 1269 = 83528532 - 2358 = 6174
输入样例2:
2222
输出样例2:
2222 - 2222 = 0000

思路:这一题主要就是对字符串和整型的转化,以及对字符串的排序,可以用sscanf和sprintf来实现;也可以自己写转换的方法,不过会比较麻烦,至于sscanf和sprint百度一下就行了。

代码如下:

#include <iostream>#include <stdio.h>#include <algorithm>using namespace std;bool cmp(char a,char b){    if (a!=b)        return a>b;}int main(){    int a=0,b=0;    char n[4];    cin>>n;    sort(n,n+4,cmp);    sscanf(n,"%d",&a);    sort(n,n+4);    sscanf(n,"%d",&b);    while (1)    {        printf("%04d - %04d = %04d\n",a,b,a-b);        if (a-b==6174||a==b)            break;        else            sprintf(n,"%04d",a-b);        sort(n,n+4,cmp);        sscanf(n,"%d",&a);        sort(n,n+4);        sscanf(n,"%d",&b);    }    return 0;}

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 去北戴河怎么办安检证 电脑空格键打字失灵怎么办 国外玩游戏延迟怎么办 韩服lol要求输韩文怎么办 智齿碰到牙神经怎么办 合影中有人去世怎么办 在家中遇到蛇怎么办 去澳门手机充电怎么办 商标撕下来胶怎么办 商标被提出异议怎么办 商标被别人用怎么办 商标申请不下来怎么办 注册商标有近似商标怎么办 电话话打不通怎么办 公司卖了商标怎么办 商标撕不下来怎么办 商标撕不下来时怎么办 商标还没下来怎么办 商标揭不下来怎么办 手机程序出现异常怎么办 公众号企业名称是*怎么办 家人生命受到威胁怎么办 海淘看不懂英文怎么办 对英语不感兴趣怎么办 装修无合同起诉怎么办 上海离职后档案怎么办 公司注销了银行帐户怎么办 360借条注销了怎么办 注销营业执照公章丢失怎么办 工厂招聘信息有假怎么办 个体餐饮怎么办核名 见父母后接下来怎么办 工商核名重名怎么办 核名通知书过期怎么办 包头鼎太风华怎么办 用人单位不续签劳动合同怎么办 全是英文看不懂怎么办 孩子智力发育晚怎么办 公司比赛成绩不好怎么办 解压手续过期了怎么办 违章通知单丢了怎么办