gpt4 book ai didi

c++ - 罗马数转十进制数,获取垃圾值

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:02:07 26 4
gpt4 key购买 nike

我必须创建一个程序来将罗马数字转换为十进制数字,我得到的输出是垃圾值。事实上,我已经仔细检查了我的逻辑,它似乎是正确的。

我该如何纠正?

这是我的代码:

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

class RomanType
{
char str[10];
int d;
public:
void accept()
{
cout<<"Enter Roman No. in capitals:"<<endl;
cin>>str;
convert(str);
}

void convert(char str1[10])
{
int j=0;

for(j=0;j<strlen(str1);j++)
{

if( str1[j]=='I')
{
if(str1[j+1]=='V' || str1[j+1]=='X')
{
d=d-1;
cout<<j<<endl;
}
else
{
d=d+1;
cout<<d<<endl;
}
}

if ( str1[j]=='V')
d=d+5;

if(str1[j]=='X')
{
if(str1[j+1]=='L' || str1[j+1]=='C')
d=d-10;
else
d=d+10;
}

if(str1[j]=='L')
d=d+50;

if( str1[j]=='C')
{
if(str1[j+1]=='D' || str1[j+1]=='M')
d=d-100;
else
d=d+100;
}

if(str1[j]=='D')
d=d+500;

if(str1[j]=='M')
d=d+1000;
}
}

void display()
{
cout<<"It's decimal equivalent is="<<d<<endl;
}
};

main()
{
RomanType obj;
obj.accept();
obj.display();
}

最佳答案

几点:

  • 不要直接跳转到解析高值(value)罗马字。仅从 IVX 开始(即首先定位 1 到 10,然后是 11 到 20,然后是 21 到 39,40 到99、100 到 499 等)
  • 不要假设如果给出I,它是在VX 之前或之后给出的。它可能是自己给出的(例如 II - 你的其他部分假设了一些东西)。
  • 分配 d 的值为
  • 进行单步调试,观察d 和其他变量的值。如果调试器不好或不可用,请在每个步骤/迭代中输出值。
  • [Add] 您不需要将str 传递给函数convert,因为它们属于同一类,而convert 可以/将阅读相同的内容。

关于c++ - 罗马数转十进制数,获取垃圾值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26890381/

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