2015-12-10 40 views
-1

對於編程作業,我需要用C它接受一個輸入x並將其轉換爲基礎n,其中x是一個十進制數和n可以表示爲編碼一個功能to_base(n,x)2^y。有沒有人有任何想法如何去做這件事?改變一個無符號十進制到基座2^N

我設法編寫一個函數,使用遞歸除法變爲二進制,但我不知道如何推廣它。

void to_base(unsigned long x, int n) 
{ 
    int r; 
    r = x%2; 
    if(x != 0) 
     to_base_n(x/2,n); 
    printf("%c",(r == 0 ? '0' : '1')); 
} 
+1

您可以通過啓動一個很好的方向認識到'n'應該是基礎,但你永遠不會使用它;相反,你使用硬編碼的2(這是二進制的基礎)。 –

回答

1

我一直在與科昌手冊和第7章學習ç做類似的事情,我不得不解決像你這樣的問題,所以我想出了這個解決方案:

// Program to convert a positive integer to another base 

#include <stdio.h> 
#include <stdbool.h> 

int  convertedNumber[64]; 
long int numberToConvert; 
int  base; 
int  digit; 

void getNumberAndBase (void) 
{ 
    bool askAgain = true; 

    printf ("Number to be converted? "); 
    scanf ("%li", &numberToConvert); 

    if (numberToConvert == 0) 
    { 
     askAgain = false; 
    } 

    while (askAgain) 
    { 
     printf ("Base? "); 
     scanf ("%i", &base);   
     if (base < 2 || base > 16) { 
      printf ("Bad base - must be between 2 and 16\n"); 
     } else { 
      askAgain = false; 
     } 
    }; 

} 

void convertNumber (void) 
{ 
    digit = 0; 
    do { 

     convertedNumber[digit] = numberToConvert % base; 
     ++digit; 
     numberToConvert /= base; 
    } 
    while (numberToConvert != 0); 
} 

void displayConvertedNumber (void) 
{ 
    const char baseDigits[16] = 
      { '0', '1', '2', '3', '4', '5', '6', '7', 
      '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' }; 
    int nextDigit; 

    printf ("Converted number = "); 

    for (--digit; digit >= 0; --digit) { 
     nextDigit = convertedNumber[digit]; 
     printf ("%c", baseDigits[nextDigit]); 
    } 

    printf ("\n"); 
} 

int main (void) 
{ 
    void getNumberAndBase (void), convertNumber (void), 
      displayConvertedNumber (void); 

    while (true) 
    { 
     getNumberAndBase(); 

     if (numberToConvert == 0) 
     { 
      break; 
     } 
     convertNumber(); 
     displayConvertedNumber(); 
    } 
    return 0; 
} 

其實你不不需要遞歸函數,像convertNumber函數中那樣的while循環將會執行,您必須劃分直到沒有任何剩餘的內容。

我張貼的例子是無功能參數,但全局變量簡單,因爲這是書上的那一章的水平,但我認爲這會給你,你可以制定進一步

+1

每次轉換數字時,需要將數字的值設置爲0。更改int數字= 0;以int數字;然後添加語句digit = 0;在convertNumber函數的最開始。 – ringzero

+0

@ringzero你是,對。消息來源更正了,謝謝 – Andrea

相關問題