通常我們所接觸到的10
1010
進製、2
22進製計數法都歸屬於按位計數法,通常來說,n
nn進製計數法的特徵有:
使用的數字有0,1
,...
,n−1
0,1,...,n-1
0,1,..
.,n−
1,共n
nn種;
從右往左分別為n0位
,n1位
,n2位
……
n^0位,n^1位,n^2位……
n0位,n1
位,n2
位……比如,對於n
nn進製中的數字b0b
1b2b
3b
4b_0b_1b_2b_3b_4
b0b1
b2b
3b4
,其組成為:
b 0∗
n4+b
1∗n3
+b2∗
n2+b
3∗n1
+b4∗
n0
b_0*n^4+b_1*n^3+b_2*n^2+b_3*n^1+b_4*n^0
b0∗n4
+b1
∗n3+
b2∗
n2+b
3∗n
1+b4
∗n0
其中b 0,
b1,b
2,b3
,b
4b_0,b_1,b_2,b_3,b_4
b0,b1
,b2
,b3
,b4
是00
0到n−
1n-1
n−1中的數字。
羅馬計數法就是不按位計數法,並且我們在生活中也十分常見,它的主要特徵有:
數字沒有意義,只表示數字本身
沒有0使用m, cm, d,cd, c,xc,l,xl,x,ix,v,iv,i分別表示1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1
將併排的數字加起來就是我們要表示的數
比如十進位制中的2008,使用羅馬計數法表示就是mmviii
這個任務其實很有意思,其結合了程式設計入門中「輸出數字的每一位」這個問題與擴充套件字串,利用matlab中字串型別操作十分簡便,**如下:
function romstr =
dec2rom
(n) romstr ="";
if n==
0return
; end
strtable =
["m"
,"cm"
,"d"
,"cd"
,"c"
,"xc"
,"l"
,"xl"
,"x"
,"ix"
,"v"
,"iv"
,"i"];
basenumbers =
[1000
,900
,500
,400
,100,90
,50,40
,10,9
,5,4
,1];
for i =1:
length
(strtable)
t =floor
(n/basenumbers
(i))
;if t
for j =1:t
romstr = romstr +
strtable
(i);
endn =
mod(n,
basenumbers
(i))
; end
end
end
>>dec2rom(n)
ans =
"mmviii"
程式設計師的數學/(日)結城浩著;管傑譯. ——北京:人民郵電出版社,2012.
羅馬數字轉換成整數
時間限制 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 ...
整數轉換成羅馬數字
編寫乙個將整數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。這樣我...
整數轉換成羅馬數字
時間限制 1000ms 記憶體限制 65536k 給定乙個整數 num 將整數轉換成羅馬數字。如 1,2,3,4,5 對應的羅馬數字分別為i,ii,iii,iv,v等。第一行輸入乙個整數 num 1 num 3999 輸出 num 對應的羅馬數字。樣例輸入123 樣例輸出cxxiii 總結 一道簡單...