Yahoo奇摩知識+將於 2021 年 5 月 4 日 (美國東部時間) 終止服務。自 2021 年 4 月 20 日 (美國東部時間) 起,Yahoo奇摩知識+服務將會轉為唯讀模式。其他Yahoo奇摩產品與服務或您的Yahoo奇摩帳號都不會受影響。如需關於Yahoo奇摩知識+ 停止服務以及下載您個人資料的資訊,請參閱說明網頁。
java西元轉換羅馬數字
該怎樣把西元的年份轉換成羅馬數字呢 ?? 例如說西元1978 = MCMLXXVIII ??
只要用一個迴圈就可以做的出來嗎??要怎麼作??
2 個解答
- 加菲貓Lv 71 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;
}
}
程式參考來源:
參考資料: 加菲貓