2016-12-30 8 views
-3

イム読み取り問題C++で解くと、以下を理解しないために追加:行27で文字列はローマ数字

  • を私が考えるものに変更したときの兆候は後ろ向きですがより大きいと少ないように思えます彼らはプログラムが実行される必要があります。 <>標識がある理由をお知らせください。

  • 行47で始まる文字列関数では、どの文字列を選択するのかはどのように分かりますか?私が1930年を入力すれば、プログラムは900のために何とか9つのカンマを越えて「CM」という次の文字列を選ぶことが分かり、30の場合も3つのカンマを超えて「XXX」を選択する必要があることが分かります。 ..しかし、私は確信していない?あなたは今年、行27で1930

#include <iostream> 
#include <string> 
using namespace std; 


//function prototype 
string toRomanLiterals(int); 

int main() 
//program displays Arabic Years as Roman Years 
{ 
//declare integer as number 
int integernumber; 
//declare a character 
char choice; 

//do while loop to continue by y or no 
do 
{ 
    //do while loop to read integer from user 
    //read integer number between 1 and 3000 only 
    do 
    { 
     cout << "Enter a number between 1000 and 3000: "; 
     cin >> integernumber; 
    } 
    while (integernumber < 1000 || integernumber > 3000); 

    if (integernumber > 1000 || integernumber < 3000) 
    { 
     //calling toRomanLiterals function 
     string output= toRomanLiterals(integernumber); 
     cout << output<<endl; 
    } 
    //continue to ask until user wishes to stop 
    cout << "Would you like to continue? [y/n]" << endl; 
    cin >> choice; 

} 
while (choice != 'n'); 
return 0; 
} 

//string toRomanLitrals takes the integer number and converts to a given 
//number to a Roman number if it is between 1000 and 3000 

string toRomanLiterals(int number) 
{ 
string roman; 
int th,h,t,o; 

//string array for numbers 1 to 9 
string ones[] = 
{"", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"}; 
//string array for numbers 10 to 90 
string tens[] = 
{"", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"}; 
//string array for numbers 100 to 900 
string hundreds[] = 
{"", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"}; 
//string array for numbers 1000 to 3000 
string thousands[] = {"", "M", "MM", "MMM"}; 

if (number <= 3000) 
{ 
    //get number of thousands 
    th = number/1000; 
    number = number % 1000; 

    //get number of hundreds 
    h = number/100; 
    number = number % 100; 

    //get number of tens 
    t = number/10; 
    o = number % 10; 

    //concatenate all string values of thousands, hundreds, tens, zeros 
    //concatenate all symbols 

    roman += thousands[th].append(hundreds[h]) 
      .append(tens[t]).append(ones[o]); 

} 
return roman; 
} 
+1

「後方」とはどういう意味ですか?あなたは各文の最初の文字を適切に大文字にすることができますか?アポストロフィはどこにありますか? –

答えて

-1

の私の例を使用して、私はそれが「CM」&「XXX」を選択することを知っている方法を知っている可能性がありますより大きいと少ないように思えます兆候よりも後ろ向きですが、私は彼らがプログラムを実行する必要があると思うものに変更するとき。 <>標識がある理由をお知らせください。

だから、プログラムは、入力が行47で始まる文字列関数の中で1000年と3000

の間ではなかった場合、どのようにそれがどの文字列に知っている、integernumberのための入力のために再度要求します選んだ?私が1930年を入力すれば、プログラムは900のために何とか9つのカンマを越えて「CM」という次の文字列を選ぶことが分かり、30の場合も3つのカンマを超えて「XXX」を選択する必要があることが分かります。 ..しかし、私は確信していない?あなたは、私はそれはあなたの例の数、1930年、

要するに
th = number/1000; // th gets 1 
number = number % 1000; // number is now 930 

h = number/100; // h gets 9 
number = number % 100; // number is now 30 

t = number/10; // t gets 3 
o = number % 10; // o gets 0 

roman += thousands[th].append(hundreds[h]) 
     .append(tens[t]).append(ones[o]); 
// gets the numerals "M", "CM", "XXX" and "", and appends them together, getting "MCMXXX" 

のために年間1930

の私の例を使用して「CM」&「XXX」を選択することを知っている方法を知っている可能性があります関数は数値から桁を抽出し、それらのローマ数字を取得し、それらを付加して答えを得る。

また、恐ろしいusing namespace stdを使用しないでください!これは名前の衝突を引き起こし、何かを分割する可能性が非常に高いです。

+0

文字列toRomanLiterals関数には、配列のデータポイントが使用されることを示す 'th'、 'h'、 't'、 'o'があります。 – michaelBard

+0

はい。 'th 'は1、' thousand'は '' M ''などとなります。 –

関連する問題