查看完整版本: 麻煩幫我解惑一下(有關十進位轉成其他進位的表示法)~"~
頁: [1]

Seed1992 發表於 2011-9-19 06:29 AM

麻煩幫我解惑一下(有關十進位轉成其他進位的表示法)~"~

本帖最後由 Seed1992 於 2011-9-21 08:57 AM 編輯

小弟首次在這裡發文...
他要求輸入數字之後
可以把它分別切成2;8;16進位的表示法
不知道我的程式碼算不算錯...應該是不能就直接這麼寫
我的寫法寫出來後他所輸出的數字排序會是反的
不知道正確的寫法應該是如何!?
又或是說~可以直接從我的寫法改進!?
#include<iostream>
using namespace std;
void main(){
      int number;
      cout << "Enter a positive decimal integer: ";
      cin >> number;
      cout << "\n";
      for (int a = number;a > 0;a /= 2){
            if (a%2 == 1)
                  cout << "1";
            else
                  cout << "0";
      }
      cout << "\n";
      for (int b = number;b > 0;b /= 8){
            if (b%8 == 1)
                  cout << "1";
            else if (b%8 == 2)
                  cout << "2";
            else if (b%8 == 3)
                  cout << "3";
            else if (b%8 == 4)
                  cout << "4";
            else if (b%8 == 5)
                  cout << "5";
            else if (b%8 == 6)
                  cout << "6";
            else if (b%8 == 7)
                  cout << "7";
            else
                  cout << "0";
      }
      cout << "\n";
      for (int c = number;c > 0;c /= 16){
            if (c%16 == 1)
                  cout << "1";
            else if (c%16 == 2)
                  cout << "2";
            else if (c%16 == 3)
                  cout << "3";
            else if (c%16 == 4)
                  cout << "4";
            else if (c%16 == 5)
                  cout << "5";
            else if (c%16 == 6)
                  cout << "6";
            else if (c%16 == 7)
                  cout << "7";
            else if (c%16 == 8)
                  cout << "8";
            else if (c%16 == 9)
                  cout << "9";
            else if (c%16 == 10)
                  cout << "A";
            else if (c%16 == 11)
                  cout << "B";
            else if (c%16 == 12)
                  cout << "C";
            else if (c%16 == 13)
                  cout << "D";
            else if (c%16 == 14)
                  cout << "E";
            else if (c%16 == 15)
                  cout << "F";
            else
                  cout << "0";
      }
      cout << "\n";
      system("pause");
}


(這算是個蠢方法吧= =")...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div><div></div>

塔拉 發表於 2011-9-19 01:12 PM

本帖最後由 塔拉 於 2011-9-19 01:15 PM 編輯

首次發文記得看板規= ="
會相反的原因是因為你先處理低位元 然後就直接輸出
導致輸出位置是從高位元往低位元的方向排
簡單一點可以用遞迴方式處理
void bin(int input)
{
     if(input>1)
         bin(input/2);
     if(input%2 == 0)
         cout<<0;
     else
         cout<<1;   
}另外二進位也可以用位元的方式處理 會比較有效率
C++的Stream Manipulator(串流操作子 是這樣翻嗎?)
可以直接處理8,10,16進位的輸出輸入cout<<oct<<number<<endl;
cout<<hex<<number<<endl;...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div>
頁: [1]