HOMEWORK
以下是我为家庭作业创作的所有代码。我被困在作业的最后一部分。
分配: 以下是他给我们的代码来测试我们的工作。
int main()
{
roman r1 = 1234;
roman r2 = "DLXVII"; // 567
roman r3 = r1 + r2;
cout << r1 << " + " << r2 << " = " << r3;
cin.get();
}
Produces the following output:
MCCXXXIV + DLXVII = MDCCCI
以下是我编写的代码。
#include <iostream>
#include <string>
using namespace std;
class roman {
public:
string numR;
int numI;
string romanConversion(int input) {
string m[] = { "", "M", "MM", "MMM" };
string c[] = { "", "C", "CC", "CCC", "CD", "D",
"DC", "DCC", "DCCC", "CM" };
string x[] = { "", "X", "XX", "XXX", "XL", "L",
"LX", "LXX", "LXXX", "XC" };
string i[] = { "", "I", "II", "III", "VI", "V",
"VI", "VII", "VIII", "IX" };
string thousands = m[input / 1000];
string hundreds = c[(input % 1000) / 100];
string tens = x[(input % 100) / 10];
string ones = i[input % 10];
string answer = thousands + hundreds + tens + ones;
return answer;
}
int value(char r)
{
if (r == 'I')
return 1;
if (r == 'V')
return 5;
if (r == 'X')
return 10;
if (r == 'L')
return 50;
if (r == 'C')
return 100;
if (r == 'D')
return 500;
if (r == 'M')
return 1000;
return -1;
}
int romanToDecimal(string &str)
{
int result = 0;
for (int i = 0; i<str.length(); i++)
{
int s1 = value(str[i]);
if (i + 1 < str.length())
{
int s2 = value(str[i + 1]);
if (s1 >= s2)
{
result = result + s1;
}
else
{
result = result + s2 - s1;
i++;
}
}
else
{
result = result + s1;
i++;
}
}
return result;
}
};
int main() {
roman test = roman();
int input = 3999;
cout << test.romanConversion(input) << endl;
string roman = "MMMCMXCIX";
cout << test.romanToDecimal(roman) << endl;
cin.get();
}
我们一直在最后一小部分工作的最后一小时工作,它正在重载赋值运算符,因此我们可以直接分配整数和“罗马数字”,然后对它们执行方程等。
我们尝试了几种尝试重载=方法的不同方法,但在提交“字符串”时遇到错误 这是“没有合适的构造函数可以从”const char“转换为roman。
任何指导都非常适合创建赋值运算符。
答案 0 :(得分:1)
这看起来像一个有趣的任务。编译器不满意你没有接受整数和字符数组的罗马类的构造函数,它不知道如何添加两个类型为&#39; roman&#39;在一起,并且它不知道如何输出罗马式的对象。检查下面插入的代码,看看我写的//你填写的地方
#include <iostream>
#include <string>
using namespace std;
class roman {
public:
string numR;
int numI;
roman(int)
{
// you fill in stuff here
}
roman(const char *)
{
// you fill in stuff here
}
roman operator+(const roman &rhs)
{
// you fill in stuff here
}
string romanConversion(int input) {
string m[] = { "", "M", "MM", "MMM" };
string c[] = { "", "C", "CC", "CCC", "CD", "D",
"DC", "DCC", "DCCC", "CM" };
string x[] = { "", "X", "XX", "XXX", "XL", "L",
"LX", "LXX", "LXXX", "XC" };
string i[] = { "", "I", "II", "III", "VI", "V",
"VI", "VII", "VIII", "IX" };
string thousands = m[input / 1000];
string hundreds = c[(input % 1000) / 100];
string tens = x[(input % 100) / 10];
string ones = i[input % 10];
string answer = thousands + hundreds + tens + ones;
return answer;
}
int value(char r)
{
if (r == 'I')
return 1;
if (r == 'V')
return 5;
if (r == 'X')
return 10;
if (r == 'L')
return 50;
if (r == 'C')
return 100;
if (r == 'D')
return 500;
if (r == 'M')
return 1000;
return -1;
}
int romanToDecimal(string &str)
{
int result = 0;
for (int i = 0; i<str.length(); i++)
{
int s1 = value(str[i]);
if (i + 1 < str.length())
{
int s2 = value(str[i + 1]);
if (s1 >= s2)
{
result = result + s1;
}
else
{
result = result + s2 - s1;
i++;
}
}
else
{
result = result + s1;
i++;
}
}
return result;
}
};
ostream& operator<<(ostream& os, const roman &)
{
// you fill in stuff here
return os;
}
int main()
{
roman r1 = 1234;
roman r2 = "DLXVII"; // 567
roman r3 = r1 + r2;
cout << r1 << " + " << r2 << " = " << r3;
cin.get();
}