ローマ数字と整数の相互転化(わかりやすい暴力C++)

3355 ワード

きほんもじ
I
V
X
L
C
D
M
対応するアラビア数字は
1
5
10
50
100
500
1000
同じ数字の連写、表す数はこれらの数字が加算された数に等しい.例えば、III=3;

小さい数字は大きい数字の右側にあり、表す数はこれらの数字を加算した数に等しい.例えば、VIII=8、IX=12;

小さい数字(I、X、Cに限る)は大きい数字の左側で、表す数は大きい数の小数を減らして得た数に等しい.例えば、IV=4、IX=9;

通常の使用時、連写の数字は3回を超えてはならない.

1つの数の上に横線を引いて、この数が1000倍に拡大したことを示します.
ローマ数字の規定は0から3999で、データが多くないことを考えてみてください.CSDNの多くの牛がmapマッピングや文字配列で保存しているのを見て、実は4000のデータは多くありません.暴力を試してみてください.暴力とは最も愚かな方法で、それは最初から最後まで探して、条件を満たすものを見つけて出力します.C++で文字列関数を定義するとstringのような文字列に戻ります.(int n){return文字列}
このような関数モデルと同様に,主関数に変換が必要な整数を入力し,文字列タイプ関数を呼び出すと結果が得られる.文字列関数の内部についてどう書きますか?
入力された整数の各ビットの値を対応する文字列に加算するだけで、まず空のストリングstring str=""""""""""""""";を定義する必要があります. 
ではif(n/1000==1)s=s+「M」は、入力された整数が千ビットあることを示し、文字列にMが加算されます.このような定義は、C++STLのクラスライブラリのstringクラスライブラリがすべてであるため、末尾に新しい文字列を加えることはできません.
では、ローマの数字を入力して整数に変換するにはどうすればいいのでしょうか.
intタイプ関数を定義できます.パラメータは文字列タイプです.
これなら我々も暴力で捜索できる
例えば、文字列を入力して変換関数を呼び出しstring.length()この方法で入力された文字列の長さを判断し、if(配列要素='I)を仮定するとn+=1はこのように推定されますが、IV、IX、XL、XC、CD、CMのような特殊なローマ数字を入力すると、減算ではなくデフォルト加算されるので、文字列をスキャンする必要があります.C++stringクラスライブラリのfind(string)関数を呼び出します.この関数は、1つの文字列の中で括弧に一致する文字列を見つけて、その下の記号を返してさっき言ったように、IVが正しいのは4ですが、判断する前に6であれば、私たちは-2ができます.他の状況も似ています.
ソースコードを添付:
#include
#include
using namespace std;
//        
string InttoRoman(int n)
{
	string s="";
	int qianwei,baiwei,shiwei,gewei;
	qianwei = n/1000;
	baiwei = n/100%10;
	shiwei = n/10%10;
	gewei = n%10;
	if(qianwei>0)
	{
	if(qianwei == 1)s+="M";
	if(qianwei == 2)s+="MM";
	if(qianwei == 3)s+="MMM";
    }
    if(baiwei>0)
    {
	if(baiwei == 1)s+="C";
	if(baiwei == 2)s+="CC";
	if(baiwei == 3)s+="CCC";
	if(baiwei == 4)s+="CD";
	if(baiwei == 5)s+="D";
	if(baiwei == 6)s+="DC";
	if(baiwei == 7)s+="DCC";
	if(baiwei == 8)s+="DCCC";
	if(baiwei == 9)s+="CM";
    }
    if(shiwei>0)
    {
	if(shiwei == 1)s+="X";
	if(shiwei == 2)s+="XX";
	if(shiwei == 3)s+="XXX";
	if(shiwei == 4)s+="XL";
	if(shiwei == 5)s+="L";
	if(shiwei == 6)s+="LX";
	if(shiwei == 7)s+="LXX";
	if(shiwei == 8)s+="LXXX";
	if(shiwei == 9)s+="XC";
    }
    if(gewei>0)
    {
	if(gewei == 1)s+="I";
	if(gewei == 2)s+="II";
	if(gewei == 3)s+="III";
	if(gewei == 4)s+="IV";
	if(gewei == 5)s+="V";
	if(gewei == 6)s+="VI";
	if(gewei == 7)s+="VII";
	if(gewei == 8)s+="VIII";
	if(gewei == 9)s+="IX";
    }
	return s;
} 
//         
int RomantoInt(string str)
{
	int n = 0;
	for(int i=0;i=0) n-=2;        
	if(b>=0) n-=2;
	if(c>=0) n-=20;
	if(d>=0) n-=20;
	if(e>=0) n-=200;
	if(f>=0) n-=200;
	
	return n;
	
} 


int main()
{
	int num;
	cin>>num;
    cout<>s;
    cout<