八进制到十进制转换(调试)

时间:2016-05-01 06:42:19

标签: c++ debugging

所以代码意味着将十进制数转换为八进制数,并且我已经重载了运算符<<给出我的输出

然而转换永远不会发生,我得到一个奇怪的输出

这是我的代码

#include<iostream>
#include<math.h>
using namespace std;
class OCTAL
{
    int octnum;
    public: int dec_oct(int);
            int oct_dec(int);
            OCTAL(int x)
            {

                octnum=dec_oct(x);
            }
            int operator+(int k)
            {
                return (oct_dec(octnum)+k);
            }
            friend ostream& operator<<(ostream&,OCTAL);
};
int OCTAL::dec_oct(int x)
{

    int i=0,sum=0;
    while(x!=0)
    {
        sum+=((x%8))+(pow(10,i));
        x=x/8;
        i++;
    }
    return sum;
}

int OCTAL::oct_dec(int x)
{

    int i=0,sum=0;
    while(x!=0)
    {
        sum+=(x%10)+pow(8,i);
        x=x/10;
        i++;
    }
    return sum;
}

ostream& operator<<(ostream& ps,OCTAL obj)
{
    cout<<obj.octnum<<endl;
    return ps;
}

int main()
{

    int x,k;
    cout<<"Enter decimal N\n";
    cin>>x;
    OCTAL n(x);
    cout<<"Octal + object ="<<n<<endl;
    cout<<"Enter base 10 No to be added\n";
    cin>>k;
    int y=(n+k);
    cout<<"Sum = "<<y<<endl;
}

    #include<math.h>
    using namespace std;
    class OCTAL
    {
        int octnum;
        public: int dec_oct(int);
                int oct_dec(int);
                OCTAL(int x)
                {

                    octnum=dec_oct(x);
                }
                int operator+(int k)
                {
                    return (oct_dec(octnum)+k);
                }
                friend ostream& operator<<(ostream&,OCTAL);
    };
    int OCTAL::dec_oct(int x)
    {

        int i=0,sum=0;
        while(x!=0)
        {
            sum+=((x%8))+(pow(10,i));
            x=x/8;
            i++;
        }

    }

    int OCTAL::oct_dec(int x)
    {

        int i=0,sum=0;
        while(x!=0)
        {
            sum+=(x%10)+pow(8,i);
            x=x/10;
            i++;
        }
    }

    ostream& operator<<(ostream& ps,OCTAL obj)
    {
        cout<<obj.octnum<<endl;
        return ps;
    }

    int main()
    {

        int x,k;
        cout<<"Enter decimal No\n";
        cin>>x;
        OCTAL n(x);
        cout<<"Octal + object ="<<n<<endl;
        cout<<"Enter base 10 No to be added\n";
        cin>>k;
        int y=(n+k);
        cout<<"Sum = "<<y<<endl;
    }

输出 输入要转换的十进制数字
10个
Octal + object = 14

输入基数10否添加
15个
Sum = 29

2 个答案:

答案 0 :(得分:0)

sum+=(x%10)+pow(8,i);

想象一下x是9.你得到9%10 = 9 + 8 ^ 0 = 9 + 1 = 10.

我猜这不是你想要的。你可能想要11 - 但是你应该将值作为字符串返回。

问题是你一次处理10个可能的值(0-9),当你实际上不能处理超过8时。理想情况下,你每次迭代都会将x移位3位,即你可以随时代表你正在处理的价值。

x & 7将为您提供前3位的值,然后您可以将x移位3 x>>3以准备接下来要读取的3位。

这是让你入门的东西:

int main() {
    int x = 44;
    while(x > 0) {
        auto v = x&7;
        cout<<v<<endl;
        x=x>>3;
    }
}

http://melpon.org/wandbox/permlink/50qDr48F9oyd5t4z

答案 1 :(得分:0)

八进制和十进制是整数值的外部表示。在内部,价值只是一个价值;它不是八进制,不是十进制,也不是红色。将八进制输入转换为整数值意味着将文本输入转换为内部值;将值转换为八进制意味着生成表示内部值的 text 字符串。十进制相同的东西。因此,当您的任务是将八进制转换为十进制时,您将以文本字符串开头并以文本字符串结尾,通常转换为中间表示中的整数值。所以八进制 - &gt;整数 - &gt;十进制,实现为文本 - &gt;整数 - &gt;文本。

相关问题