每輸入一個數字就跟當前最大數比較
比較方式優先順序為
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;
}
留言列表