qq_43274660 2020-02-18 18:02 采纳率: 100%
浏览 564
已采纳

PAT乙级1019数字黑洞2,3,4测试点无法通过

我想用char数组解决输出时三位数之前的“0”,于是用了很多的循环,我自己改了几次,但2,3,4测试点就是无法通过,很苦恼。请问一下代码还有什么地方欠考虑。

#include<iostream>
#include<string>
#include<algorithm>
using namespace std;

bool cmp(char a, char b)
{
    return a > b;
}
int main()
{
    char number1[4], number2[4];
    int n = 0;
    for (int i = 0; i < 4; i++)
    {
        cin>>number1[i];
    }
    if (number1[0] == number1[1]&& number1[1]== number1[2]&& number1[2]== number1[3])//4位数字相同时的输出
    {
        for (int i = 0; i < 4; i++)
        {
            cout << number1[i];
        }
        printf(" - ");
        for (int i = 0; i < 4; i++)
        {
            cout << number1[i];
        }
        printf(" = 0000");
    }
    else//其他情况
    {

        while (n != 6174)
        {
            for (int i = 0; i < 4; i++)
            {
                number2[i] = number1[i];
            }
            sort(number1, number1 + 4, cmp);//较大的数
            sort(number2, number2 + 4);//较小的数
            for (int i = 0; i < 4; i++)//输出相减的两个数
            {
                cout << number1[i];
            }
            printf(" - ");
            for (int i = 0; i < 4; i++)
            {
                cout << number2[i];
            }



            int n1 = 0, n2 = 0,t=1;
            for (int i = 3; i >=0; i--)//输出相减结果
            {
                n1 += ((int)number1[i]-48) * t;
                t *= 10;
            }
            t = 1;
            for (int i = 3; i >= 0; i--)
            {
                n2 += ((int)number2[i]-48) * t;
                t *= 10;
            }
            n = n1 - n2;
            printf(" = %04d\n", n);

            int temp = n;
            int i = 0;
            while(i<4)//记录相减的结果
            {
                number1[i++] = (char)(temp % 10+48);
                temp /= 10;
            }
        }

    }
    return 0;
}
  • 写回答

1条回答 默认 最新

  • threenewbee 2020-02-18 18:50
    关注

    我搜索到了题目,你注意看

    输入格式:
    输入给出一个(0, 10000)区间内的正整数N。

    你没有考虑<10000的情况

    如果是 < 10000,你的程序还在等待输入,而实际上应该是补0

    我把输入修改了下,你看看行不行

    // Q1055005.cpp : Defines the entry point for the console application.
    //
    
    #include<iostream>
    #include<string>
    #include<algorithm>
    using namespace std;
    
    bool cmp(char a, char b)
    {
        return a > b;
    }
    int main()
    {
        char number1[4], number2[4];
        int n = 0;
        int input;
        cin >> input;
        for (int i = 0; i < 4; i++)
        {
            number1[4-i-1] = input % 10 + '0';
            input /= 10;
        }
        if (number1[0] == number1[1]&& number1[1]== number1[2]&& number1[2]== number1[3])//4位数字相同时的输出
        {
            for (int i = 0; i < 4; i++)
            {
                cout << number1[i];
            }
            printf(" - ");
            for (int i = 0; i < 4; i++)
            {
                cout << number1[i];
            }
            printf(" = 0000");
        }
        else//其他情况
        {
    
            while (n != 6174)
            {
                for (int i = 0; i < 4; i++)
                {
                    number2[i] = number1[i];
                }
                sort(number1, number1 + 4, cmp);//较大的数
                sort(number2, number2 + 4);//较小的数
                for (int i = 0; i < 4; i++)//输出相减的两个数
                {
                    cout << number1[i];
                }
                printf(" - ");
                for (int i = 0; i < 4; i++)
                {
                    cout << number2[i];
                }
    
    
    
                int n1 = 0, n2 = 0,t=1;
                for (int i = 3; i >=0; i--)//输出相减结果
                {
                    n1 += ((int)number1[i]-48) * t;
                    t *= 10;
                }
                t = 1;
                for (int i = 3; i >= 0; i--)
                {
                    n2 += ((int)number2[i]-48) * t;
                    t *= 10;
                }
                n = n1 - n2;
                printf(" = %04d\n", n);
    
                int temp = n;
                int i = 0;
                while(i<4)//记录相减的结果
                {
                    number1[i++] = (char)(temp % 10+48);
                    temp /= 10;
                }
            }
    
        }
        return 0;
    }
    
    

    问题解决的话,请点下采纳,谢谢合作

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 2024-五一综合模拟赛
  • ¥15 下图接收小电路,谁知道原理
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭