當前位置:首頁 » 編程語言 » 羅馬數字轉換為十進制數c語言
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

羅馬數字轉換為十進制數c語言

發布時間: 2022-07-11 14:29:27

㈠ C語言 十進制數轉換為羅馬數字的引深

這不就是判斷嗎,跟輸入字元轉換成字元串一樣的

㈡ 求將羅馬數轉換成十進制數的C源代碼

羅馬數字是歐洲在阿拉伯數字傳入之前使用的一種數碼。羅馬數字採用七個羅馬字母作數字,即Ⅰ(1)、X(10)、C (100)、M (1000),V (5)、L(50)、D (500)。記數的方法:(1)相同的數字連寫,所表示的數等於這些數字相加得到的數,如, Ⅲ = 3;(2)小的數字在大的數字的右邊,所表示的數等於這些數字相加得到的數, 如,Ⅷ = 8,Ⅻ = 12;(3)小的數字,(限於Ⅰ、X 和 C)在大的數字的左邊,所表示的數等於大數減小數得到的數,如,Ⅳ = 4,Ⅸ = 9;(4)在一個數的上面畫一條橫線,表示這個數增值 1 000 倍,如 Ⅻ = 12 000 。羅馬數字的組數規則,有幾條須注意掌握;(1)基本數字Ⅰ、X 、C 中的任何一個,自身連用構成數目,或者放在大數的右邊連用構成數目,都不能超過三個;放在大數的左邊只能用一個。(2)不能把基本數字 V 、L 、D 中的任何一個作為小數放在大數的左邊採用相減的方法構成數目;放在大數的右邊採用相加的方式構成數目,只能使用一個。(3)V 和 X 左邊的小數字只能用Ⅰ。(4)L 和 C 左邊的小數字只能用×。(5)D 和 M 左 邊的小數字只能用 C 。用羅馬數字記較大的數非常麻煩, 所以已不常用了。在中文出版物中,羅馬數字主要用於某些代碼,如產品型號等。計算機 ASCⅡ碼收錄有合體的羅馬數字 1~12 。

羅馬數字起源於古羅馬。一共有7個數字元號:IVXLCDM.相應的阿拉伯數字表示為:1510501005001000用羅馬數字表示數時,如果幾個相同的數字並列,就表示這個數的值是數碼的幾倍。倒如:羅馬數字要表示3,可以寫成III;要表示20,可以寫成XX;要表示30,可寫成XXX。不相同的幾個數碼並列時,如果小的數碼在右邊,就表示數的數值是這幾個數碼的和;如果小的數碼在基邊,就表示數的數值是數碼之差。例如:6用羅馬數字可以表示為VI;4用羅馬數字表示為IV;11用羅馬數字表示為XI;48用羅馬數字表示為IIL。在數字上面畫一橫線,表示這個數字增值1000倍。例如:10000寫成X;11000寫成XI。遺憾的是,羅馬數字里沒有0。這種記數法有很大不便。如果表示8732這個數,那麼就得寫成IIXDCCXXXII如果要有0就方便多了。0引入的時間是在中世紀,那時歐洲教會的勢力非常強大,他們千方百計地阻止0的傳播,甚至有人為了傳播0而被處死。但是黑暗終究戰勝不了光明,人們一但意識到0的重要作用,就會不顧一切地沖破教會的束縛,大膽地使用起它來。

㈢ 羅馬數字轉換為十進制數的問題

#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#define SYMBOLNUM 7
int GetSymbolIndex(char symbols[],char symbol,int n)
{
while(--n>0)
if(toupper(symbol)==symbols[n])
return n;
return n;
}
int main()
{
char r[16];
char symbols[SYMBOLNUM]={'I','V','X','L','C','D','M'};
int power[SYMBOLNUM]={1,5,10,50,100,500,1000};
int n,len,i=0,*rslt,value=0;
printf("羅馬數字個數:");
scanf("%d",&n);
rslt=(int*)malloc(n*sizeof(int));
while(i<n)
{
scanf("%s",r);
len=strlen(r)-1;
while(len>=0)
{
int index=GetSymbolIndex(symbols,r[len],SYMBOLNUM);
if(index<0)
{
puts("輸入了非法字元!");
free(rslt);
return 0;
}
if(len>0)
{
int index_1=GetSymbolIndex(symbols,r[len-1],SYMBOLNUM);
if(index_1<0)
{
puts("輸入了非法字元!");
free(rslt);
return 0;
}
else if(index==index_1+2||index==index_1+1)
{
value+=power[index]-power[index_1];
len-=2;
}
else
{
value+=power[index];
len--;
}
}
else
{
value+=power[index];
break;
}
}
rslt[i++]=value;
value=0;
}
for(i=0;i<n;i++)
printf("%d\n",rslt[i]);
free(rslt);
return 0;
}

㈣ C語言如何將一個數字組成的字元串轉變成十進制數

辦法很多,提供三種供參考。

一、直接使用庫函數atoi將數字字元串轉換成十進制整數。代碼如下:

#include"stdio.h"
#include"stdlib.h"//調用庫函數atoi要包含這個文件
intmain(intargc,char*argv[]){
chara[]="478167831";
printf("%d ",atoi(a));//直接調用atoi將a轉換為十進制整數
return0;
}

二、用庫函數sscanf直接將數組中的數字字元串讀入十進制整型變數。代碼如下:

#include"stdio.h"
intmain(intargc,char*argv[]){
chara[]="478167831";
intx;
sscanf(a,"%d",&x);//調用sscanf,讀入時自動轉換為int型並由%d控制以十進制賦給變數x
printf("%d ",x);//輸出
return0;
}

三、自行編寫轉換代碼:

#include"stdio.h"
intmain(intargc,char*argv[]){
chara[]="478167831";
intx,i;
for(x=i=0;a[i];(x*=10)+=a[i++]-'0');//字元與數字的關系是"字元值-'0'==同名數字"
printf("%d ",x);//輸出
return0;
}

上述三代碼的輸出結果如下圖:

㈤ C++將輸入的羅馬數據化為十進制數

可以參見網路的羅馬數字規則:

基本數字 Ⅰ、X 、C 中的任何一個、自身連用構成數目、或者放在大數的右邊連用構成數目、都不能超過三個;放在大數的左邊只能用一個;

不能把基本數字 V 、L 、D 中的任何一個作為小數放在大數的左邊採用相減的方法構成數目;放在大數的右邊採用相加的方式構成數目、只能使用一個;

V 和 X 左邊的小數字只能用 Ⅰ;

L 和 C 左邊的小數字只能用X;

D 和 M 左邊的小數字只能用 C。

這樣,首先需要對數字進行規則檢查,然後才能轉換。

這里涉及到詞法分析方面的知識。建議反過來,從羅馬數字串的右邊開始反向檢索分析,這樣可以邊分析邊處理同時可以及時終止報錯。

代碼大致如下(沒有寫完哈,請自行補充其他的情形):

#defineM_1000
#defineD_500
#defineC_100
#defineL_50
#defineX_10
#defineV_5
#defineI_1

charr_digits='LXXXVII';
#include<string.h>
unsignedr2d(char*p){
unsignedres=0;
intlen=strlen(p);
inti;
unsignedshortcnt_M=0;
unsignedshortcnt_D=0;
unsignedshortcnt_C=0;
unsignedshortcnt_L=0;
unsignedshortcnt_X=0;
unsignedshortcnt_V=0;
unsignedshortcnt_I=0;
charpre_char=p[len-i-1];
switch(){
case'M':res=M_;break;
case'D':res=D_;break;
case'C':res=C_;break;
case'L':res=L_;break;
case'X':res=X_;break;
case'V':res=V_;break;
case'I':res=I_;break;
};
for(i=1;i<len;i++){
switch(p[len-i-1]){
case'I':
switch(pre_char){
case'M':res=NULL;printf("Error:%s %*.*s ",p,len-i-1+7,len-i-1+7,"^");break;
case'D':res=NULL;printf("Error:%s %*.*s ",p,len-i-1+7,len-i-1+7,"^");break;
case'C':res=NULL;printf("Error:%s %*.*s ",p,len-i-1+7,len-i-1+7,"^");break;
case'L':res=NULL;printf("Error:%s %*.*s ",p,len-i-1+7,len-i-1+7,"^");break;
case'X':res=NULL;printf("Error:%s %*.*s ",p,len-i-1+7,len-i-1+7,"^");break;
case'V':if(cnt_I==0){cnt_I++;res-=I_;}else{res=NULL;printf("Error:%s %*.*s ",p,len-i-1+7,len-i-1+7,"^");}break;
case'I':if(cnt_I<=2){cnt_I++;res+=I_;}else{res=NULL;printf("Error:%s %*.*s ",p,len-i-1+7,len-i-1+7,"^");}break;
default:res=NULL;printf("Error:%s %*.*s ",p,len-i-1+7,len-i-1+7,"^");break;
}
case'V':
}
}
}

㈥ C語言 羅馬數字轉十進制2

//剛寫的code,測試通過,如果有疑問,歡迎交流
#include<stdio.h>
#defineN13
charstr_lib[][10]={"I","IV","V","IX","X","XL","L","XC","C","CD","D","CM","M"};
intval_lib[]={1,4,5,9,10,40,50,90,100,400,500,900,1000};

intmain(){

intnum,cur_value,i;
while(scanf("%d",&num)!=EOF){
for(i=0;i<N;i++){
cur_value=num/val_lib[N-i-1];
while(cur_value){
printf("%s",str_lib[N-i-1]);
cur_value--;
}
num%=val_lib[N-i-1];
}
putchar(' ');
}
return0;
}

㈦ C語言,怎麼把十進制數轉化成羅馬數字啊

#include<stdio.h>

intmain()
{
staticchar*a[][10]={"","I","II","III","IV","V","VI","VII","VIII","IX",
"","X","XX","XXX","XL","L","LX","LXX","LXXX","XC",
"","C","CC","CCC","CD","D","DC","DCC","DCCC","CM"
};/*建立對照表*/
intn,t,i,m;
printf("Pleaseenternumber:");
scanf("%d",&n);/*輸入整數*/
printf("%d=",n);
for(m=0,i=1000;m<3;m++,i/=10)
{
t=(n%i)/(i/10);/*從高位向低位依次取各位的數字*/
printf("%s",a[2-m][t]);/*通過對照表翻譯輸出*/
}
printf(" ");

}

㈧ C語言 輸入羅馬數字轉換成十進制的數字

#include <stdio.h>
static int map[26] = {0};
#define BUF_SIZE 81
#define N 24
int getNumber(char *s)
{
char *p = s;
int number = 0;
int value;
char c;
while(*p && (*p != '\n')){
value = map[*p];
c = *(p+1);
if((c == '\0') || (c == '\n') || (map[c] <= value)){
number += value;
}else{
number -= value;
}
p++;
}
return number;
}
int main()
{
int n;
int i;
char buf[BUF_SIZE];
int out[N];
map['I'] = 1;
map['V'] = 5;
map['X'] = 10;
map['L'] = 50;
map['C'] = 100;
map['D'] = 500;
map['M'] = 1000;
scanf("%d\n", &n);
if(n > N) return 1;
for(i = 0; i < n; i++){
fgets(buf, BUF_SIZE, stdin);
out[i] = getNumber(buf);
}
for(i = 0; i < n; i++){
printf("%d\n", out[i]);
}
return 0;
}