PTA 乙级 B1019 数字黑洞 C++

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
bool cmp1(char a, char b)
{
    return a > b;
}
int main()
{

    string str;
    cin >> str;
    str.insert(0, 4 - str.size(), '0'); // 题目说是四位数,所以位数不够要补零 输入11 补零后 str="0011"
    string max = str;
    string min = str;
    sort(max.begin(), max.end(), cmp1); // 定义的cmp1函数 使其升序
    sort(min.begin(), min.end());       // sort 默认排序降序
    int result = stoi(max) - stoi(min); // 两者之差 stoi(字符串,起始位置,n进制),将n进制的字符串转化为十进制 默认从位置0开始,进制为十进制

    while (result != 6174 || max == min)
    {
        if (max == min) // 如果是max=min 即四位数字相同 输出 N - N = 0000
        {
            cout << max << " - " << min << " = "
                 << "0000" << endl;
            break; // 跳出循环
        }

        cout << max << " - " << min << " = "; // 输出格式 比如1000-0001 输出0999 使用printf在前面补0
        printf("%04d", result);
        cout << endl;

        string mid;                         // 定义一个中间量 作为过渡
        mid = to_string(result);            // to_string 把int类型的数字常量变成字符串类型
        mid.insert(0, 4 - mid.size(), '0'); // 前面用printf输出是0999 但result实际还是999 所以还是要补0
        max = mid;                          // 将得到的字符串同输入的字符串进行一样的操作 进行判断
        min = mid;
        sort(max.begin(), max.end(), cmp1);
        sort(min.begin(), min.end());
        result = stoi(max) - stoi(min);
    }
    if (max != min) // 当result=6174时 已经跳出了while循环 所有最后还得输出一次
    {
        cout << max << " - " << min << " = " << stoi(max) - stoi(min) << endl;
    }
    system("pause");
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值