C 語言編程:輸入 16 進制,以 8 進制輸出

給定n個十六進制正整數,輸出它們對應的八進制數。


輸入格式:

  輸入的第一行爲一個正整數n (1<=n<=10)。

  接下來n行,每行一個由0~9、大寫字母A~F組成的字符串,

表示要轉換的十六進制正整數,每個十六進制數長度不超過100000。


輸出格式:

  輸出n行,每行爲輸入對應的八進制正整數。


注意

  輸入的十六進制數不會有前導0,比如012A。

  輸出的八進制數也不能有前導0。


題目鏈接:http://zhidao.baidu.com/question/624821357816224364.html


做而論道編程如下:2015-01-28 11:58


提問者採納


16 進制數字中的字母,應該都是大寫的。因此,就不要檢測小寫的符號。


輸入十六進制數無前導0、無後綴H;

輸出等效的 10 進制、8 進制數。


#include<iostream>

using namespace std;


void main()

{

    int i, n;

    char s1[10];    //輸入的16進制數

    char s2[20];    //輸出的八進制數

   

    cin >> s1;      //輸入0~9, A~F, 不要輸入其它符號


    n = 0;

    i = 0;

    while (s1[i]) {

      n *= 16;

      if ((s1[i] >= '0') && (s1[i] <= '9'))  n += (s1[i] - 48);

      if ((s1[i] >= 'A') && (s1[i] <= 'F'))  n += (s1[i] - 55);

//無視其它符號

      i++;

    }


    cout << "_10_ = " << n;

    cout << endl << "__8_ = ";


    s2[0] = n % 8 + 48;

    n /= 8;


    i = 1;

    while (n) {

      s2[i] = n % 8 + 48;

      n /= 8;

      i++;

    }

    while (i) {

      cout << s2[i - 1];

      i--;

    }

    cout << endl;

    system("pause");

}


提問者評論:2015-1-31 19:45


棒棒嗒 能加好友嘛


做而論道2015-1-29 12:23


3ABC = ((3 * 16 + A) * 16 + B) * 16 + C。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章