? 發問時間: 電腦與網際網路程式設計 · 1 0 年前

語言程式c++ 有點急~~請幫幫忙~~~

寫一個程式 提供數字進位法的轉換

規格:

轉換一個數字在~9進位表示法的一個數字(xxxx.yyyy)

轉換成它的等效8進位表示法(xxxxx.yyyyy)。

例如:

把一個9進位的數字轉換到8進位。

輸入9進位數字(xxxx.yyyy): 1459.1042

錯誤: 1459.1042 不是一個正確的9進位數字

輸入9進位數字(xxxx.yyyy): 1457.1042

等效8進位數字: 2121.07366

處理其它轉換或放棄? (C/Q) C

把一個數字從9進位轉換到8進位。

輸入9進位數字(xxxx.yyyy): 5805.4120

等效8進位數字: 10312.35321

處理其它轉換或放棄? (C/Q) Q

1 個解答

評分
  • 1 0 年前
    最佳解答

    #include <stdio.h>

    void trans(char s[])

    {

    int i, i1=0, i2=0;

    for (i = 0; i < 4; i++)

    {

    if (s[i] < '0' || s[i] > '8')

    {

    printf("錯誤: %s 不是一個正確的9進位數字\n", s);

    return;

    }

    i1 = i1*9 + s[i]-'0';

    }

    for (i = 5; i < 9; i++)

    {

    if (s[i] < '0' || s[i] > '8')

    {

    printf("錯誤: %s 不是一個正確的9進位數字\n", s);

    return;

    }

    i2 = i2*9 + s[i]-'0';

    }

    int i3=0, i4=0, t=1;

    while (i1 > 0)

    {

    i3 += i1%8*t;

    t *= 10;

    i1 = i1/8;

    }

    int i5 = 9*9*9*9;

    for (t = 0; t < 5; t++)

    {

    s[t] = i2*8/i5 + '0';

    i2 = i2*8%i5;

    if (i2 == 0) break;

    }

    s[t] = 0;

    printf ("等效8進位數字: %i.%s\n", i3, s);

    }

    int main(int argc, char* argv[])

    {

    char s1[10];

    while (true)

    {

    printf("輸入9進位數字(xxxx.yyyy): ");

    scanf("%9s", s1);

    if (s1[4] != '.') printf("格式錯誤\n");

    else trans(s1);

    printf("處理其它轉換或放棄? (C/Q)");

    scanf("%1s", s1);

    if (s1[0] == 'Q') break;

    }

    system("pause");

    return 0;

    }

    參考資料: me
還有問題?馬上發問,尋求解答。