2014-10-18 61 views
0

因此,即時創建遞歸函數以將數字從基數2-10轉換爲基數2-16時出現問題。我需要它返回一個字符串(顯然,由於基數大於10)。使用遞歸將一個基數中的數字轉換爲另一個基數

這裏是我的功能:

主要會這樣稱呼它:

answer = baseConversion(101, 10, 2); 

我有十六進制爲常量字符:

const char Hex[] = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'}; 

char * baseConverter(int number,int currbase, int base){ 

    if(currbase != 10){ 

     number = base10Converter(number, currbase); //converts the number to base of 10 

     currbase = 10; 
    } 

    if(number == 0 || base==10){ 

     return number; 

    } 

    int r = number%base; 

    printf("%c", Hex[r]); 

    //return (number % base) + 10*baseConverter(number /base, currbase, base); // this gives the answer as an integer. 
    return Hex[r]+ && baseConverter(number /base, currbase, base) // I dont know what to add here to add the characters together 
} 

我需要我的return語句和遞歸幫助呼叫。 我是否需要在函數中聲明一個char數組,然後將從十六進制[r]得到的字符添加到它中?如果是這樣,我該怎麼做,因爲我不能改變參數

+0

功能base10Converter的內容是什麼 – 2014-10-18 23:17:36

回答

2
  • int s沒有基地,他們只是有價值。你如何顯示或用一個字符串表示,有基礎。因此,除非以您想要轉換的值的字符串表示形式開始,否則沒有任何意義可用currBase,
  • baseConverter,被定義爲它返回一個字符串;因爲它沒有傳遞該字符串的空間,所以它將不得不分配它。
  • 因此,對於遞歸的情況,你可以撥打baseConverter給你一個字符串給其餘的數字,並用它來創建一個新的字符串(你需要分配),一定要取消分配當你完成後,你從遞歸調用中得到的字符串。
+0

感謝您的回覆。對於你提到的第三點,我必須爲我的函數(baseConverter)中的sting分配內存。然而,我想知道我是否返回了strncmp(hex [r],baseConverter(...));那會有用嗎?如果不是,我將如何去做你的方式。 @Scott Hunter – mrquiksilver 2014-10-19 20:55:46

+0

strcat(hax [r],baseConverter(...));我的意思是 – mrquiksilver 2014-10-19 21:15:17

+0

'strcat'需要一個字符串來連接,這意味着需要在某個點分配字符串。此外,它假定您已經爲連接分配了足夠的空間。最後,'strcat'要求你連接一個字符串,而不是一個字符。 – 2014-10-20 00:32:09

相關問題