该程序没有给出预期的输出

时间:2017-11-04 12:09:02

标签: c++

“编写一个读取 n 数字并确定数字 c 的程序,这是包含在其中找到的最大数字的最小读数。 “

示例:n = 10;数字:23 12 64 12 72 345 67 23 71 634; c = 67(这些数字中找到的最大数字是7,它可以在72,67,71中找到。最小的数字是67)

我不知道为什么,但我的程序不起作用。每一次,它都告诉我c = 0。

#include <iostream>
using namespace std;

int main()
{
    int n, prec, crt, digitMax, t, a, i, c;
    digitMax=0;
    t=0;

    cout<<"Give the number of numbers: "; cin>>n;
    cout<<"Give the first number: "; cin>>prec;
    do{
        a=prec%10;
        prec=(prec-a)/10;
        if(a>digitMax){
            digitMax=a;
        }
    } while(prec!=0);


    for(i=1; i<n; i++){
        cout<<"Give the next number: "; cin>>crt;
        do{
            a=crt%10;
            crt=(crt-a)/10;
            if(a>t){
                t=a;
            }
        } while(crt!=0);

        if(digitMax>t){
            c=prec;
        } else if(digitMax<t) {
            digitMax=t;
            c=crt;
        } else if(prec>=crt){
            c=crt;
        } else{
            c=prec;
        }
        prec=crt;
    }
    cout<<"c is "<<c;
}

1 个答案:

答案 0 :(得分:0)

问题是你在一个函数内部做所有事情使它变得非常复杂。解决问题的正确方法是首先定义一个执行较小任务的小函数。

计算数字中最大数字的一个:

int BigestDigitOf(int x)
{
    x = std::abs(x);
    int biggestDigit = 0;
    while (x)
    {
        biggestDigit = std::max(biggestDigit, x%10);
        x/=10;
    }
    return biggestDigit;
}

根据c定义比较两个数字的那个:

bool BiggerDigitOrSmallerValue(int a, int b)
{
    auto bdA = BigestDigitOf(a);
    auto bdB = BigestDigitOf(b);
    if (bdA > bdB) {
        return true;
    }
    return bdA == bdB && a < b;
}

之后解决问题非常简单(如果使用STL,则为一行)。