欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

【力扣】12.整數(shù)轉(zhuǎn)換羅馬數(shù)字C語言-創(chuàng)新互聯(lián)

整數(shù)轉(zhuǎn)換羅馬數(shù)字

羅馬數(shù)字包含以下七種字符:?I,?V,?X,?L,C,D?和?M。

讓客戶滿意是我們工作的目標,不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價值的長期合作伙伴,公司提供的服務(wù)項目有:國際域名空間、虛擬空間、營銷軟件、網(wǎng)站建設(shè)、工農(nóng)網(wǎng)站維護、網(wǎng)站推廣。

字符 ?????????數(shù)值

I ????????????1

V ????????????5

X ????????????10

L ????????????50

C ????????????100

D ????????????500

M ????????????1000

例如, 羅馬數(shù)字 2 寫做?II?,即為兩個并列的 1。12 寫做?XII?,即為?X?+?II?。 27 寫做??XXVII, 即為?XX?+?V?+?II?。

通常情況下,羅馬數(shù)字中小的數(shù)字在大的數(shù)字的右邊。但也存在特例,例如 4 不寫做?IIII,而是?IV。數(shù)字 1 在數(shù)字 5 的左邊,所表示的數(shù)等于大數(shù) 5 減小數(shù) 1 得到的數(shù)值 4 。同樣地,數(shù)字 9 表示為?IX。這個特殊的規(guī)則只適用于以下六種情況:

I?可以放在?V?(5) 和?X?(10) 的左邊,來表示 4 和 9。

X?可以放在?L?(50) 和?C?(100) 的左邊,來表示 40 和?90。?

C?可以放在?D?(500) 和?M?(1000) 的左邊,來表示?400 和?900。

給你一個整數(shù),將其轉(zhuǎn)為羅馬數(shù)字。

示例?1:

輸入:?num = 3

輸出: "III"

示例?2:

輸入:?num = 4

輸出: "IV"

示例?3:

輸入:?num = 9

輸出: "IX"

示例?4:

輸入:?num = 58

輸出: "LVIII"

解釋: L = 50, V = 5, III = 3.

示例?5:

輸入:?num = 1994

輸出: "MCMXCIV"

解釋: M = 1000, CM = 900, XC = 90, IV = 4.

題意比較好理解,那我們從高位開始輸出吧,輸出一個羅馬數(shù)字字符,就把對應(yīng)的數(shù)字減掉,等減到零,我們的輸出自然就結(jié)束了。

這里,我打算用兩個數(shù)組,分別儲存羅馬數(shù)字字符,還有對應(yīng)的數(shù)字。

int num[12] = {1000,900,500,400,100,90,50,40,10,5,4,1};
char rom[12][3] = {"M","CM","D","CD","C","XC","L","XL","X","V","IV","I"};

這里用數(shù)組儲存,方便之后直接用索引來找到。

怎么做呢?這里我們輸入了一個數(shù)之后,就進入一個循環(huán)結(jié)構(gòu),每次進入循環(huán)先看這個數(shù)在哪個范圍,找到對應(yīng)的索引,然后根據(jù)數(shù)組和得到的索引,分別輸出對應(yīng)的羅馬數(shù)字字符,并減去對應(yīng)的數(shù)字,一直查,一直減,直到為零。

比如,輸入的數(shù)字是1300,第一次進入循環(huán)后,發(fā)現(xiàn)它大可以減去1000,對應(yīng)的索引應(yīng)該是0,即可以根據(jù)這個索引分別找到兩個數(shù)組中的1000和“M”,然后輸出“M”,減去1000,剩下的300就再次進入循環(huán),發(fā)現(xiàn)它大可以減去100,對應(yīng)的索引應(yīng)該是4,根據(jù)這個索引分別找到兩個數(shù)組中的100和“C”,輸出“C”,減去100,再以剩下的200進入循環(huán)...

要注意這個“大可以減去x”,這是關(guān)鍵

最后,輸出的結(jié)果是

MCCC

根據(jù)題意,我們剛剛創(chuàng)建的兩個數(shù)組都有12個元素,這里簡單粗暴一點,直接用12個分支結(jié)構(gòu)來做。(純屬擺爛嘞,不過這樣挺直觀的,容易理解)

#includeint main()
{
	int num[12] = {1000,900,500,400,100,90,50,40,10,5,4,1};
	char rom[12][3] = {"M","CM","D","CD","C","XC","L","XL","X","V","IV","I"};
	
	int n;
	scanf("%d",&n);
	
	int i;
	while(n>0)
	{
		if(n>=1000)
		{
			i = 0;
		}else if(n>=900)
		{
			i = 1;
		}else if(n>=500)
		{
			i = 2;
		}else if(n>=400)
		{
			i = 3;
		}else if(n>=100)
		{
			i = 4;
		}else if(n>=90)
		{
			i = 5;
		}else if(n>=50)
		{
			i = 6;
		}else if(n>=40)
		{
			i = 7;
		}else if(n>=10)
		{
			i = 8;
		}else if(n>=5)
		{
			i = 9;
		}else if(n>=4)
		{
			i = 10;
		}else if(n>=1)
		{
			i = 11;
		}
		n = n - num[i];//減去
		printf("%s",rom[i]);//輸出
	}
	
	return 0;
}

不過,我看了別人的題解之后,知道了不用那么多分支結(jié)構(gòu)的做法。

#includeint main()
{
	int num[12] = {1000,900,500,400,100,90,50,40,10,5,4,1};
	char rom[12][3] = {"M","CM","D","CD","C","XC","L","XL","X","V","IV","I"};
	
	int n;
	scanf("%d",&n);
	
	int i;
	while(n>0)
	{
		i=0;
		while(n

思路大致相同,只是找這個索引的方式不一樣。

最后,附上題解

char * intToRoman(int num){
    char *symbles[13] = {"I","IV","V","IX","X","XL","L","XC","C","CD","D","CM","M"};
    int nums[13] = {1,4,5,9,10,40,50,90,100,400,500,900,1000};

    int i;
    char *rom = malloc(sizeof(char)*16);
    rom[0] = '\0';
    while(num>0)
    {
        i=12;
        while(num

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧

標題名稱:【力扣】12.整數(shù)轉(zhuǎn)換羅馬數(shù)字C語言-創(chuàng)新互聯(lián)
URL地址:http://chinadenli.net/article10/ddiggo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站建設(shè)、虛擬主機、動態(tài)網(wǎng)站、面包屑導(dǎo)航、關(guān)鍵詞優(yōu)化、App設(shè)計

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)