a013. 羅馬數字 5/16/2025

解法一

✅ 完整代碼

評分結果(參考) : AC (2ms, 320KB)

#include <bits/stdc++.h>
using namespace std;

int romanSub(string line){
    int num=0, previousNum=0, currentNum=0;
    int n=1; // 正負號

    for(int i=0; i < line.length(); i++){
        if(line[i] == ' '){ n=-1; previousNum=0; currentNum=0; } 
        previousNum = currentNum;

        if(line[i] == 'M')     { currentNum = 1000; num += 1000*n; } 
        else if(line[i] == 'D'){ currentNum = 500;  num += 500*n;  } 
        else if(line[i] == 'C'){ currentNum = 100;  num += 100*n;  } 
        else if(line[i] == 'L'){ currentNum = 50;   num += 50*n;   } 
        else if(line[i] == 'X'){ currentNum = 10;   num += 10*n;   } 
        else if(line[i] == 'V'){ currentNum = 5;    num += 5*n;    } 
        else if(line[i] == 'I'){ currentNum = 1;    num += 1*n;    }

        if(previousNum < currentNum){
            num -= 2*previousNum*n;
        }
    }

    return abs(num);
}

string int2roman(int num){
    string roman = "";

    if(num == 0) roman += "ZERO";
    while(num > 0){
        if(num >= 1000)    { roman += "M" ; num-=1000; } 
        else if(num >= 900){ roman += "CM"; num-=900;  } 
        else if(num >= 500){ roman += "D" ; num-=500;  } 
        else if(num >= 400){ roman += "CD"; num-=400;  } 
        else if(num >= 100){ roman += "C" ; num-=100;  } 
        else if(num >= 90) { roman += "XC"; num-=90;   } 
        else if(num >= 50) { roman += "L" ; num-=50;   } 
        else if(num >= 40) { roman += "XL"; num-=40;   } 
        else if(num >= 10) { roman += "X" ; num-=10;   } 
        else if(num >= 9)  { roman += "IX"; num-=9;    } 
        else if(num >= 5)  { roman += "V" ; num-=5;    } 
        else if(num >= 4)  { roman += "IV"; num-=4;    } 
        else if(num >= 1)  { roman += "I" ; num-=1;    } 
    }

    return roman;
}

int main(){
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    while(true){
        string line;
        getline(cin, line);

        if(line == "#") break;

        cout << int2roman(romanSub(line)) << "\n";
    }

    return 0;
}