PAT乙级-1019 数字黑洞-C语言实现(23行AC)

坑点分析:

1.输入数可能为6174

2.输入数可能小于4位

考察知识点归纳:

将输入整数"分解"后对各位分析操作再"合并"计算

#include<stdio.h>
#include<stdlib.h>
int cmp(const void *a,const void *b){//直接用qsort()快排函数就完事了(使代码简洁)
    return *(int *)b-*(int *)a;
}
int main(void){
    int i,n,N,wxx[4];//由于输入整数只有4位,又涉及到整数的分解与合并,故整数各位由整型数组储存更合适
    scanf("%d",&N);
    do{//由与开始的N4位相同时输出格式都一样故不需要特例输出
        n=0;//n不要忘了每次初始化
        while(N){//将开始的N或者每次的结果数分解
            wxx[n++]=N%10;
            N/=10;
        }
        for(i=n;i<4;i++)//由于输入整数的位数可能小于4,故将其余位补0(因为每次输出数都必须4位)
        wxx[i]=0;
        qsort(wxx,4,sizeof(int),cmp);//将各位数从大到小排序
        printf("%d%d%d%d - %d%d%d%d = ",wxx[0],wxx[1],wxx[2],wxx[3],wxx[3],wxx[2],wxx[1],wxx[0]);//由于位数确定且较少,直接输出就完事(不用循环)
        N=(wxx[0]*1000+wxx[1]*100+wxx[2]*10+wxx[3])-(wxx[3]*1000+wxx[2]*100+wxx[1]*10+wxx[0]);//由于位数确定且较少,直接算就完事(不用循环)
        printf("%04d\n",N);//输出结果值(结果值还是用N储存,以便循环)(%04d结果数不足位直接补0非常方便)
    }while(N!=0&&N!=6174);//由于开始的N可能就为6174无法进入循环(题目要求是结果数为6174),故使用do{}while();结构
    return 0;
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

西西努力变强

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值