首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从罗马数字到十进制数,得到垃圾值

从罗马数字到十进制数,得到垃圾值
EN

Stack Overflow用户
提问于 2014-11-12 15:20:41
回答 4查看 1.2K关注 0票数 4

我必须创建一个程序,用于将罗马数字转换为十进制数,并将其作为输出得到垃圾值。事实上,我已经反复检查了我的逻辑,这似乎是正确的。

我怎样才能改正呢?

这是我的密码:

代码语言:javascript
复制
#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();
}
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-11-12 16:30:09

好的,伙计们,谢谢你们的帮助。现在已经解决了。我犯了一个错误,这个错误再次在convert()中初始化了d,因此使它成为一个局部变量。见评论:

代码语言:javascript
复制
#include<iostream>
#include<cstring>
using namespace std;

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

void convert()
{
     d=0;// PREVIOUSLY WRIITEN int d=0; so that was the mistake. Yay! it's solved :D


    for(int j=0;j<10;j++)
    {

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

        }

    }

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

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

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

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

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

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


}

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

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

}
票数 0
EN

Stack Overflow用户

发布于 2014-11-12 15:32:50

以下几点:

  • 不要直接去解析高价值的罗马人。仅从IVX开始(即目标1至10、11至20、21至39、40至99、100至499等)。
  • 不要假设如果给出了I,那么它是在VX之前或之后给出的。它可以给自己(例如)。II --你其他部分是假设的)。
  • 用零赋值d
  • 进行步骤调试,观察d和其他变量的值。如果调试器不好或不可用,请在每个步骤/迭代中输出值。
  • 添加--您不需要传递str来函数convert,因为它们属于同一个类,convert可以/将读取相同的内容。
票数 2
EN

Stack Overflow用户

发布于 2014-11-12 15:32:03

您没有将d初始化为0

在转换中,将d=0放在开头

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26890381

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档