1019 数字黑洞 (20分) +测试点解析 +测试样例

26 篇文章 0 订阅

题目链接
思路
主要坑可能是格式问题,输出的时候要都按照四位数字输出,即要补0,但如果你测试点2、3、4没过的话可能是因为没考虑输入的数可能不足四位(虽然题目中说是四位数,挺离谱的)。。。。。。

测试样例
输入
10
输出
1000 - 0001 = 0999
9990 - 0999 = 8991
9981 - 1899 = 8082
8820 - 0288 = 8532
8532 - 2358 = 6174

AC代码

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<string>
#include<map>
#include<stack>
using namespace std;
typedef long long ll;
const int maxn=1e6;
bool cmp(int a,int b)
{
    return a>b;
}
int main()
{
    int num;
    int n[4];
    cin>>num;
    n[0]=num/1000;
    n[1]=(num/100)%10;
    n[2]=(num/10)%10;
    n[3]=num%10;
    if(n[0]==n[1]&&n[0]==n[2]&&n[0]==n[3])
        cout<<num<<" - "<<num<<" = 0000"<<endl;
    else
    {
        int a,b,c;
        while(1)
        {
            sort(n,n+4,cmp);
            a=n[0]*1000+n[1]*100+n[2]*10+n[3];
            b=n[3]*1000+n[2]*100+n[1]*10+n[0];
            c=a-b;
            cout<<n[0]<<n[1]<<n[2]<<n[3]<<" - "<<n[3]<<n[2]<<n[1]<<n[0]<<" = ";
            n[0]=c/1000;
            n[1]=(c/100)%10;
            n[2]=(c/10)%10;
            n[3]=c%10;
            cout<<n[0]<<n[1]<<n[2]<<n[3]<<endl;
            if(c==6174)
                break;
        }
    }
    return 0;
}

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值