pat甲级1069

蹲街弑〆低调 提交于 2020-02-01 19:23:28

思路:核心是找到数值与字符串互相转化的方法,还要考虑高位补0。cstdio中天然有一个利器,那就是sprintf()和sscanf()两个函数。数值有4位,转换时,字符数组大小要定为5,因为要接收最后的 ‘\0’,否则提交后会出现运行时错误。

#include <cstdio>
#include <algorithm>

int num_to_dec(int a);
int num_to_inc(int a);
bool cmp_dec(char a, char b);
bool cmp_inc(char a, char b);

int main(){
    int num;
    scanf("%d", &num);
    while(true){
        int num_dec = num_to_dec(num);
        int num_inc = num_to_inc(num);
        num = num_dec - num_inc;
        printf("%04d - %04d = %04d\n", num_dec, num_inc, num);
        if(num==0 || num==6174) break;
    }

    return 0;
}

int num_to_dec(int a){
    char n[5];
    sprintf(n, "%04d", a);
    std::sort(n, n+4, cmp_dec);
    int value=0;
    for(int i=0; i<4; i++){
        value = value*10+(n[i]-'0');
    }
    return value;
}

int num_to_inc(int a){
    char n[5];
    sprintf(n, "%04d", a);
    std::sort(n, n+4, cmp_inc);
    int value=0;
    for(int i=0; i<4; i++){
        value = value*10+(n[i]-'0');
    }
    return value;
}

bool cmp_dec(char a, char b){
    return (int)a>(int)b;
}

bool cmp_inc(char a, char b){
    return (int)a<(int)b;
}

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!