編寫乙個將整數n(1 <= n <= 9999)轉換成羅馬數字。
假如說我們有乙個數字22,那麼它轉換的方式為22-10=12>=0;
則肯定先有乙個x,接著12-10=2>=0;則接著在x後面加上x 變為xx;2-1=1>=0;則肯定後面還需要新增乙個i變為xxi,1-1=0>=0;後面還要新增乙個i變為xxii。
這樣我們可以這樣做,將對應的羅馬數字和對應的數字放到兩個二維陣列中一一對應。
char *roman[row][column] = ,,,
};int num[row][column] = ,,,
};
這樣每乙個數字進入之後,從數字陣列的第乙個元素開始,進行減法,如果差大於等於0,接著對這個數字進行減法操作,如果小於0了,則進入下乙個數字進行同樣的減法操作,每次差大於等於0的時候,在後面新增上對應的羅馬數字。則轉換演算法應該是這樣的。
/**
*@brief toroman 將數字轉換成羅馬數字儲存到陣列rom中
*@param number 要被轉換的數字
*@param rom 將轉換後的羅馬數字儲存到rom陣列中
*/void toroman(int number,char rom)}}
}
好了,主體函式已經有了,現在附上我的整體的**:
#include #include #define row 4
#define column 4
void toroman(int number,char rom);
/** *@brief main 編寫乙個將整數(1 <= x <= 9999)轉化成對應的羅馬數字的程式
*@return
*//**
* 整數n(1<=n<=9999)與羅馬數字表示有以下對應關係
* 1000 - m,有幾個1000就有幾個m對應
* 900 - 兩個字元cm
* 500 - 乙個字元d
* 400 - 兩個字元cd
* 100 - 乙個字元c,有幾個100就用幾個c表示
* 90 - 兩個字元xc
* 50 - 乙個字元l
* 40 - 兩個字元xl
* 10 - 乙個字元x,有乙個10就用幾個x
* 9 - 用兩個字元ix表示
* 5 - 用乙個字元v來表示
* 4 - 用兩個字元iv表示
* 1 - 用乙個字元i表示,有幾個1就用幾個i
* */
/** * 用兩個二維陣列儲存整數和羅馬數字的
* 對應關係
*/char *roman[row][column] = ,,,
};int num[row][column] = ,,,
};int main(int argc,char *ar**)
else
if(argc == 2)else
if(argc == 3)else
int i = low;
for(i = low;i <= high;i++)
return0;}
/** *@brief toroman 將數字轉換成羅馬數字儲存到陣列rom中
*@param number 要被轉換的數字
*@param rom 將轉換後的羅馬數字儲存到rom陣列中
*/void toroman(int number,char rom)}}
}
下面是我的程式的輸出結果:
羅馬數字轉換成整數
時間限制 1000ms 記憶體限制 65536k 給定乙個羅馬數字 s s,將羅馬數字轉換成整數。如羅馬數字i,ii,iii,iv,v分別代表數字 1,2,3,4,51,2,3,4,5。首先要來了解一下羅馬數字表示法,基本字元有 77 個 i v x l c d m,分別表示 11 55 1010 ...
整數轉換成羅馬數字
時間限制 1000ms 記憶體限制 65536k 給定乙個整數 num 將整數轉換成羅馬數字。如 1,2,3,4,5 對應的羅馬數字分別為i,ii,iii,iv,v等。第一行輸入乙個整數 num 1 num 3999 輸出 num 對應的羅馬數字。樣例輸入123 樣例輸出cxxiii 總結 一道簡單...
羅馬數字轉換成整數(注意羅馬數字的大小表示問題)
羅馬數字規則 1,羅馬數字共有7個,即i 1 v 5 x 10 l 50 c 100 d 500 和m 1000 羅馬數字中沒有 0 2,重複次數 乙個羅馬數字最多重複3次。3,右加左減 在較大的羅馬數字的右邊記上較小的羅馬數字,表示大數字加小數字。在較大的羅馬數字的左邊記上較小的羅馬數字,表示大數...