Cプログラミング
 Computer >> コンピューター >  >> プログラミング >> Cプログラミング

Cの整数からローマ字


10進数nが与えられた場合、これをローマ数字に変換する必要があります。値nは1から4000の範囲にあります。これらはいくつかのローマ数字です。

番号
数字
1

4
IV
5
V
9
IX
10
X
40
XL
50
L
90
XC
100
C
400
CD
500
D
900
CM
1000
M
4000
MMMM

したがって、数値n =859の場合、そのローマ数字はDCCCLIX

になります。

これを解決するために、次の手順に従います

  • 指定されたリストの数値と対応する値を格納する配列を定義します。それはnume配列と呼ばれます
  • 再帰的アプローチを使用しており、関数decToRom()が使用されています。これは、nume配列とnumbernumを取ります。
  • decToRom()は次のようになります
  • numが0でない場合、
    • max:=num以下のnume配列から最大値を検索
    • その最大値を結果文字列に追加します
    • num:=num –最大値
    • decToRom(nume、num)

理解を深めるために、次の実装を見てみましょう-

#include<stdio.h>
typedef struct{
   char *sym;
   int val;
}numeral;
int maxNume(numeral *nu, int num){
   int i, index;
   for(i = 0; i<15; i++){//15 numerals in array
      if(nu[i].val <= num)
         index = i;
   }
   //gretest value numeral index, not greater than number
   return index;
}
void decToRoman(numeral *nu, int num){
   int max;
   if(num != 0){
      max = maxNume(nu, num);
      printf("%s", nu[max].sym);
      num -= nu[max].val;//decrease number
      decToRoman(nu, num);//recursively print numerals
   }
}
main(){
   int number;
   numeral nume[15] = {{"I",1},{"IV",4},{"V",5},{"IX",9}, {"X",10},{"XL",40},{"L",50},{"XC",90},
{"C",100},{"CD",400},{"D",500},{"CM",900},{"M",1000},{"MMMM",4000},{"V'",5000}};
   printf("Enter a decimal number: ");
   scanf("%d", &number);
   if(number >0 && number <= 5000){//checking input number
      printf("The Roman equivalent of %d is ", number);
      decToRoman(nume, number);
   }
   else{
      printf("Invalid Input");
   }
   printf("\n");
}

入力

570
3574

出力

DLXX
MMMDLXXIV

  1. Pythonで整数を逆にする

    32ビットの符号付き整数が1つあるとします。数字を取り、数字を逆にする必要があります。したがって、数値が425のような場合、出力は524になります。数値が符号付きであることに注意する必要があるもう1つの点は、負の数が存在する可能性があることです。したがって、番号が–425の場合、–524になります。 ここにいくつかの仮定があります。 32ビット符号付き整数のドメインで使用していると仮定しました。したがって、範囲は[-232〜232 –1]になります。したがって、数値が範囲内にない場合、関数は0を返します。 これを解決するために、Pythonコードを使用します。まず、指定された整数を文字列に

  2. 正の整数のビットを逆にするPythonプログラム?

    まず、bin()関数を使用して数値を2進数に変換します。次に、bin()が数値の2進表現のプレフィックスとして0bを追加し、残りの部分を逆にするため、2進表現の最初の2文字をスキップします。また、文字から、左から最後から2番目の文字まで反転します。反転した2進文字列を整数に変換します。 アルゴリズム integernumber(n,bit_size) /* n is the number and bit_size is the bitsize */ Step 1: first convert number into binary . Step 2: skip the first two c