a013
輸入說明 :
每個輸入檔中會有一個或以上的測試資料。每一行由兩個數字組成一筆測
試資料,且所有數字將會小於4,000。檔案最後會以符號 # 表示結束。
輸出說明 :
每筆測試資料的答案必須輸出到檔案中,並且換行。如果答案為零,則須 輸出字串ZERO。
這題那時候再寫的時候,寫了大概四小時,還是一邊照著這篇刻的情況下
I=1
V=5
X=10
L=50
C=100
D=500
M=1,000
數字轉羅馬
: 遇到1000,900,500,400,100,90,50,40,10,9,5,4,1要換成特定的羅馬字,我的寫法在1000,100,10,1那邊因為會出現很多次所以要用while來寫
羅馬轉成數字
:要先考慮900,400,90,40,9,4的情形,遇到的話要先扣小的一次,比方說遇到"CM",我的值是900,但是我讀陣列想要一個一個加,所以我讀到'C'先-100,等等我讀到'M'+1000,還是等於遇到'CM'加900
要用絕對值abs 前面要把math.h ,include進去
#include<stdio.h>
#include<math.h>
#include<string.h>
int char_to_number(char []);
int main(){
int dif;
char array1 [30]={'\0'};
char array2 [30]={'\0'};
while(scanf("%s",array1)!=EOF)
{
char s[30]={0};
if(array1[0]=='#')
break;
scanf("%s",array2);
dif=abs(char_to_number(array1)-char_to_number(array2));
if(dif==0)
printf("ZERO\n");
else
{
int i=0;
while(dif>=1000)
{
dif-=1000;
s[i]='M';
i++;
}
if(dif>=900)
{
dif-=900;
s[i]='C';
s[i+1]='M';
i+=2;
}
if(dif>=500)
{
dif-=500;
s[i]='D';
i++;
}
if(dif>=400)
{
dif-=400;
s[i]='C';
s[i+1]='D';
i+=2;
}
while(dif>=100)
{
dif-=100;
s[i]='C';
i++;
}
if(dif>=90)
{
dif-=90;
s[i]='X';
s[i+1]='C';
i+=2;
}
if(dif>=50)
{
dif-=50;
s[i]='L';
i++;
}
if(dif>=40)
{
dif-=40;
s[i]='X';
s[i+1]='L';
i+=2;
}
while(dif>=10)
{
dif-=10;
s[i]='X';
i++;
}
if(dif>=9)
{
dif-=9;
s[i]='I';
s[i+1]='X';
i+=2;
}
if(dif>=5)
{
dif-=5;
s[i]='V';
i++;
}
if(dif>=4)
{
dif-=4;
s[i]='I';
s[i+1]='V';
i+=2;
}
while(dif>=1)
{
dif-=1;
s[i]='I';
i++;
}
}
printf("%s\n",s);
}
return 0;
}
int char_to_number(char s[])
{
int sum=0;
int i;
for(i=0;i<strlen(s);i++){
if(s[i]=='C'&&s[i+1]=='M')
{ sum-=100; }
else if(s[i]=='C'&&s[i+1]=='D')
{ sum-=100; }
else if(s[i]=='X'&&s[i+1]=='C')
{ sum-=10; }
else if(s[i]=='X'&&s[i+1]=='L')
{ sum-=10; }
else if(s[i]=='I'&&s[i+1]=='X')
{ sum-=1; }
else if(s[i]=='I'&&s[i+1]=='V')
{ sum-=1; }
else if(s[i]=='I')
{ sum+=1; }
else if(s[i]=='V')
{ sum+=5; }
else if(s[i]=='X')
{ sum+=10; }
else if(s[i]=='L')
{ sum+=50; }
else if(s[i]=='C')
{ sum+=100; }
else if(s[i]=='D')
{ sum+=500; }
else if(s[i]=='M')
{ sum+=1000; }
}
return sum;
}