簡體   English   中英

八進制到十進制的轉換(調試)

[英]Octal to Decimal Conversion ( 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
八進制 + 對象 =14

輸入基數 10 不添加
15
總和 = 29

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

八進制和十進制是整數值的外部表示。 在內部,值只是一個值; 它不是八進制,也不是十進制,也不是紅色。 將八進制輸入轉換為整數值是指將文本輸入轉換為內部值; 將值轉換為八進制意味着生成表示內部值的文本字符串。 十進制也是一樣。 因此,當您的任務是將八進制轉換為十進制時,您以文本字符串開頭並以文本字符串結尾,通常轉換為中間表示中的整數值。 所以八進制 --> 整數 --> 十進制,實現為文本 --> 整數 --> 文本。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM