每輸入一個數字就跟當前最大數比較

比較方式優先順序為

1. 長度

2. 大小

 

首先用 bswap 儲存是否交換,其狀態包含 init  FALSE  TRUE

之所以有3個是因為想用一個變數包含所有情況  (假設 輸入 a  ,  目前最大為 b)

狀況 1 :  a 的長度 > b (的長度) => TRUE

狀況 2 :     a 的長度 < b  =>  FALSE

狀況 3 :     a 的長度 = b  且    a 在低位數小於 b => TRUE

狀況 4 :     a 的長度 = b  且    a 在低位數大於 b => FALSE

如果一開始 bswap 為 false ,則狀況 3 無法判別 (因為不知道 false 是來自狀況 4 還是初始值)

解決方法有兩種,要麻用兩個變數,要麻多給他 (bswap) 一些狀態

 

 

#include <iostream>
#include <stdint.h>

using namespace std;

enum swapState{init, FALSE, TRUE};

int main() {

    uint32_t n;
    while(cin >> n){

        uint32_t number, MAX = 1;
        uint32_t numTmp, MAXTmp;
        swapState bswap;

        while(n--){

            cin >> number;

            numTmp = number*10;
            MAXTmp = MAX*10;
            bswap = init;


            while(numTmp && MAXTmp){

                MAXTmp /= 10;
                numTmp /= 10;

                if(MAXTmp%10 == 0 && numTmp%10 != 0)
                    bswap = TRUE;
                else if(MAXTmp%10 != 0 && numTmp%10 == 0)
                    bswap = FALSE;
                else if(MAXTmp%10 < numTmp%10 && bswap == init)
                    bswap = TRUE;
                else if(MAXTmp%10 > numTmp%10 && bswap == init)
                    bswap = FALSE;
            }

            if(bswap == TRUE)
                MAX = number;
        }


        while(MAX){
            MAXTmp = MAX%10;
            cout << MAXTmp;
            MAX /= 10;
        }

        cout << endl;
    }

    return 0;
}

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大神(偽) 的頭像
    大神(偽)

    大神的世界

    大神(偽) 發表在 痞客邦 留言(0) 人氣()