PAT Basic Level 1019. 数字黑洞(20)

【来源】

1019.数字黑洞(20)

【分析】

按照题意直接码代码即可。需要注意两点:

  1. 输出数的时候需要注意不足四位数要用0补齐;
  2. 注意输入为6174的情况。

【源码】

#include <iostream>
#include <string>
#include <algorithm>

using namespace std;

string tostring(int n){
    string s;
    if (n < 10){
        char cn = n + '0';
        s = "000";
        s += cn;
    }
    else if (n < 100){
        int shi = n / 10;
        int ge = n % 10;
        char cge = ge + '0';
        char cshi = shi + '0';
        s = "00";
        s += cshi;
        s += cge;
    }
    else if (n < 1000){
        int bai = n / 100;
        int shi = (n - bai * 100)/10;
        int ge = n % 10;
        char cge = ge + '0';
        char cshi = shi + '0';
        char cbai = bai + '0';
        s = "0";
        s += cbai;
        s += cshi;
        s += cge;
    }
    else if (n < 10000){
        int qian = n / 1000;
        int bai = (n - qian*1000) / 100;
        int shi = (n - bai * 100 - qian * 1000) / 10;
        int ge = n % 10;        
        char cge = ge + '0';
        char cshi = shi + '0';
        char cbai = bai + '0';
        char cqian = qian + '0';
        s = "";
        s += cqian;
        s += cbai;
        s += cshi;
        s += cge;
    }
    return s;
}

int toint(string s)
{
    int value = 0;
    for (int i = 0; i < s.length(); ++i){
        int digit = s[i] - '0';
        value = value * 10 + digit;
    }

    return value;
}

int main()
{
    int n;
    cin >> n;

    if (n == 6174){
        cout << "7641 - 1467 = 6174" << endl;
    }
    else{
        string s = tostring(n);
        string ss(s);
        while (ss != "6174"){
            string small(ss);
            string big(ss);
            sort(small.begin(), small.end());
            sort(big.rbegin(), big.rend());
            int result = toint(big) - toint(small);
            cout << big << " - " << small << " = " << tostring(result) << endl;
            ss = tostring(result);
            if (ss == "0000"){
                break;
            }
        }
    }
  
    system("pause");
    return 0;
}
【点评】

此题为简单的模拟题。考察字符串处理、简单排序等基础知识。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值