Trang 1 trong tổng số 1

Bài tập: Chuyển đổi số hệ 10 sang La Mã và ngược lại

Đã gửi: CN 05 Th9, 2021 09:40
bởi huynhbuutam
Viết chương trình nhập vào từ bàn phím một số La Mã có giá trị nhỏ hơn 1000. In ra màn hình số tự nhiên ở hệ thập phân có giá trị tương ứng.
Cho biết:

Mã: Chọn tất cả

Ký tự    | I | V | X  | L  |  C  |  D  |  M   
Giá trị  | 1 | 5 | 10 | 50 | 100 | 500 | 1000 
Chương trình ví dụ:

Mã: Chọn tất cả

MOI BAN NHAP VAO SO LA MA MUON DOI: XLVII
KET QUA: 47
Mã nguồn (10 sang La Mã):

Mã: Chọn tất cả

Program 10_LaMa
Uses Crt;
Var N, i: Integer;
	M1: Array[1..13] Of Integer;
	M2: Array[1..13] Of String;
	Flag: Boolean;
	R: String;
Begin
	ClrScr;
	Flag:= True;
	i:= 1;
	ReadLn(N);
	R:= '';
	M1[1]:= 1000; M1[2]:= 900;
	M1[3]:= 500; M1[4]:= 400;
	M1[5]:= 100; M1[6]:= 90;
	M1[7]:= 50; M1[8]:= 40;
	M1[9]:= 10; M1[10]:= 9;
	M1[11]:= 5; M1[12]:= 4;
	M1[13]:= 1;
	M2[1]:= 'M'; M2[2]:= 'CM';
	M2[3]:= 'D'; M2[4]:= 'CD';
	M2[5]:= 'C'; M2[6]:= 'XC';
	M2[7]:= 'L'; M2[8]:= 'XL';
	M2[9]:= 'X'; M2[10]:= 'IX';
	M2[11]:= 'V'; M2[12]:= 'IV';
	M2[13]:= 'I';
	While Flag Do Begin
		While N >= M1[i] Do Begin
			N:= N-M1[i];
			R:= R+M2[i];
			If N<1 Then Flag:= False;
		End;
		Inc(i);
	End;
	WriteLn(R);
	Readln;
End.
Max nguồn (La Mã sang 10):

Mã: Chọn tất cả

Program LaMa_10
Uses Crt;
Var St: String;
	len, i, S: Integer;
	M: Array[1..100] Of Integer;
Begin
	ClrScr;
	Write('Nhap so la ma: ');
	Readln(St);
	S:= 0;
	len:= Length(St);
	For i:= 1 To len Do
		Case St[i] Of
			'I': M[i]:= 1;
			'V': M[i]:= 5;
			'X': M[i]:= 10;
			'L': M[i]:= 50;
			'C': M[i]:= 100;
			'D': M[i]:= 500;
			'M': M[i]:= 1000;
		End;
	S:= M[len];
	For i:= len DownTo 2 Do
		If (M[i] > M[i-1]) Then S:= S - M[i-1]
		Else If (M[i] <= M[i-1]) Then S:= S + M[i-1];
	Write(S);
	Readln;
End.