gpt4 book ai didi

c++ - 在 C++ 中将罗马数字转换为标准数字

转载 作者:太空宇宙 更新时间:2023-11-04 13:53:23 24 4
gpt4 key购买 nike

我正在尝试将罗马数字转换为 C++ 中的标准数字。我制作了这样的数组:不幸的是我不知道如何检查罗马数字。因为让我们说我们的 s 是:“MCLXIV”,所以当我将通过它时,我将比较字符,例如“CM”或“IX”是字符串。

这是我的数组声明

 string rzym[13] = {"I","IV","V","IX","X","XL","L","XC","C","CD","D","CM","M"};
int arab[13] = {1,4,5,9,10,40,50,90,100,400,500,900,1000};

有什么想法吗?如果有任何帮助,我将不胜感激!

最佳答案

你可以使用这样的东西:

#include <iostream>
#include <map>
#include <string>

int from_roman(const std::string &roman)
{
std::map<char, int> map =
{
{'M', 1000}, {'D', 500}, {'C', 100},
{'L', 50}, {'X', 10}, {'V', 5},
{'I', 1}
};

int n(0);
const unsigned stop(roman.length() - 1);

for (unsigned i(0); i < stop; ++i)
if (map[roman[i]] >= map[roman[i + 1]])
n += map[roman[i]];
else
n -= map[roman[i]];

n += map[roman[stop]];

return n;
}

int main()
{
std::cout << "XIII = " << from_roman("XIII") << std::endl
<< "XIV = " << from_roman("XIV") << std::endl
<< "MCXLIV = " << from_roman("MCXLIV") << std::endl;;

return 0;
}

您应该添加输入数据验证(空字符串、无效字符...)。

此外,如果您需要反射(reflect)典型“现代”用法的标准形式:

  • 'I', 'X', 'C'不能连续出现超过三次;
  • 'V'、'L'、'D'不能连续出现超过一次;
  • “I”只能在“V”和“X”之前,“X”只能在“L”和“C”之前,“C”只能在“D”和“M”之前。

罗马人有点不一致......他们更喜欢附加形式,例如 IIII 和 VIIII(代码将处理它们)而不是 IV 和 IX。

“双重减法”也发生了(例如 IIXX 而不是 XVIII……代码不会处理它们)。

在中世纪,为了处理大数(大于 4000),在数字上方使用横杠(或在其周围放置几个括号),以表示乘以 1000。例如

(MM) = 2000000

所以上面的代码不适用于 >= 4000 的数字。

关于c++ - 在 C++ 中将罗马数字转换为标准数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22589121/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com