PAT B1019/A1069 数字黑洞 (20point(s))

题目链接

#include<cstdio>
#include<algorithm>
int n;
char str[5];
//将数字转换为字符串存储方便对各位数字排序
void convertTostr(int n){//将数字转换为字符串
    for(int i=3;i>=0;i--){
        str[i]=n%10+'0';
        n/=10;
    }
}
int convertTonum(char a[]){//将字符串转换为数字
    int res;
    res=(a[3]-'0')+(a[2]-'0')*10+(a[1]-'0')*100+(a[0]-'0')*1000;
    return res;
}
bool cmpNoIncreasing(char a,char b){//非递增排序
    return a>b;
}
bool cmpNoDecreasing(char a,char b){//非递减排序
    return a<b;
}
using namespace std;
int main(){
    scanf("%d",&n);//输入待处理的数
    do{
    convertTostr(n);//转换为字符串
    sort(str,str+4,cmpNoIncreasing);//将各位数字非递增排序
    int a=convertTonum(str);//得到各位非递增排序后的数
    sort(str,str+4,cmpNoDecreasing);//将各位数字非递减排序
    int b=convertTonum(str);//得到各位非递减排序后的数
         n=a-b;
        if(n==0) {//相减后为0,可以结束循环
            printf("%04d - %04d = %04d\n",a,b,n);
            break;
        }//否则输出计算过程
        else printf("%04d - %04d = %04d\n",a,b,n);
    }while(n!=6174);//直到出现6174才停止
    return 0;
}
发布了81 篇原创文章 · 获赞 0 · 访问量 663

猜你喜欢

转载自blog.csdn.net/weixin_44546393/article/details/105456906
今日推荐