Yahoo奇摩知識+將於 2021 年 5 月 4 日 (美國東部時間) 終止服務。自 2021 年 4 月 20 日 (美國東部時間) 起,Yahoo奇摩知識+服務將會轉為唯讀模式。其他Yahoo奇摩產品與服務或您的Yahoo奇摩帳號都不會受影響。如需關於Yahoo奇摩知識+ 停止服務以及下載您個人資料的資訊,請參閱說明網頁。

java西元轉換羅馬數字

該怎樣把西元的年份轉換成羅馬數字呢 ?? 例如說西元1978 = MCMLXXVIII ??

只要用一個迴圈就可以做的出來嗎??要怎麼作??

2 個解答

評分
  • 1 0 年前
    最佳解答

    主程式:import java.io.*;

    public class App1 {

    public static void main(String[] args) throws Exception {

    BufferedReader br=new BufferedReader(new InputStreamReader(System.in));

    System.out.println("請輸入阿拉伯數字的西元年份");

    System.out.print("阿拉伯數字轉換成");

    int input=Integer.parseInt(br.readLine());

    roman_number num=new roman_number(input);

    System.out.print("羅馬數字 = ");

    num.show();

    }

    }~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    存取的副類別程式public class roman_number {

    roman_number right; //指向右數

    roman_number left; //指向左數

    char major_number; //紀錄主數

    roman_number(int num) {

    //決定主數

    if (num<4)

    major_number='I';

    else if (num<9)

    major_number='V';

    else if (num<40)

    major_number='X';

    else if (num<90)

    major_number='L';

    else if (num<400)

    major_number='C';

    else if (num<900)

    major_number='D';

    else

    major_number='M';

    //配置左數

    char left_num='Z'; //初始化一個不合理的值

    if (getValue(major_number)>num) {

    int minus=getValue(major_number)-num;

    if (minus<2)

    left_num='I';

    else if(minus<11)

    left_num='X';

    else if(minus<101)

    left_num='C';

    left=new roman_number(getValue(left_num));

    } else

    left=null;

    //配置右數

    if (getValue(major_number)!=num) {

    if (left!=null) {

    if (getValue(major_number)-getValue(left_num)!=num)

    right=new roman_number(num-getValue(major_number)+getValue(left_num));

    } else

    right=new roman_number(num-getValue(major_number));

    }

    }

    public void show() {

    if (left != null)

    left.show();

    System.out.print(major_number);

    if (right != null)

    right.show();

    }

    public static int getValue(char chr) {

    switch(chr) {

    case 'I':

    return 1;

    case 'V':

    return 5;

    case 'X':

    return 10;

    case 'L':

    return 50;

    case 'C':

    return 100;

    case 'D':

    return 500;

    case 'M':

    return 1000;

    }

    System.out.println("Error in getValue()");

    System.exit(0);

    return 0;

    }

    }

    程式參考來源:

    http://www.cis.nctu.edu.tw/~is92001/computer/progr...

    參考資料: 加菲貓
  • 吉他
    Lv 5
    1 0 年前

    最爛的方式,就是把每個西元年份存成對應羅馬數字的String 陣列,然後用for去跑完就行了。

還有問題?馬上發問,尋求解答。