2017-11-11 113 views
-5

寫功能unsigned int的姿態(無符號整數VAL,無符號整型基) 返回十進制給出對於每個給定值VAL的值VAL。在系統val的C,十進制到其他基站系統沒有循環

值可以用鹼鹼來解釋。可以 假設基地總是2和9之間,而val爲足夠小以 在目標系統上,以使任何數量的範圍違反。 例子:

• pose (3,2) = 11 // 310 = 1 · 2 + 1 · 1 = 12 
• pose (5,5) = 10 // 510 = 1 · 5 + 0 · 1 = 105 
• pose (19,5) = 34 // 1910 = 3 · 5 + 4 · 1 = 345 
• pose (5,6) = 5 // 510 = 5 · 1 = 56 
• pose (7,7) = 10 // 710 = 1 · 7 + 0 · 1 = 107 
• pose (543,9) = 663 // 54310 = 6 · 9 

2 + 6·9 + 3·1 = 6639 請注意以下規則: •您輸出存檔應包含完全相同名爲 「convert.c」 一個文件。 此文件定義函數pose()以及可能由pose() 函數執行的其他調用。不要指定main()函數,不要包含makefile。 •您不得使用循環(關鍵詞for,while,goto)。 •您不能使用全局變量。 •您不能使用庫函數。

+7

那你試試?我應該做你的功課嗎? – OznOg

回答

1

一是一些提示或如何解決這個問題的辦法: -

  • 首先就解決問題。
  • 使用循環和局部變量以及任何需要的。
  • 一旦你解決了它。然後尋找應用約束。

事情很容易地表明,你必須使用遞歸。現在休息很簡單 - 只要決定你將在一個循環中做什麼。並用適當的參數將它傳遞給另一個遞歸調用。

unsigned int pose (unsigned int val, unsigned int base){ 
    unsigned int ret = 0; 
    if(val) 
     ret=base*pose(val/base,base)+(val%base); 
    return ret; 
} 

剖析這段代碼,就會發現幾件事情: -

  1. 我只是在做每一步的必要步驟。在循環解決方案中基本上提取了一個數字在這裏我也是這樣做的。然後通過對pose的另一個調用來解決減少的子問題。

  2. 如果考慮標準溶液,你會看到數字以相反的順序提取。你不想那樣。而不是使用另一個額外的變量,你應該使用遞歸來保存結果,並用它進行必要的最終操作。 base*pose(val/base,base)+(val%base);完成反向使用。

正如保羅所討論的那樣,如果我們把它解釋爲簡單地「打印轉換後的基數b中的數​​字」,那麼問題就更加合理了。

該解決方案將是這樣的相似: - 下一個顯示的代碼是保羅的想法。以前的代碼是我的。

void pose (unsigned int val, unsigned int base){ 
    if(val) { 
     pose(val/base,base); 
     printf("%c", (val%base)+'0'); 
    } 
} 
+0

對於每個給定值val_,返回值爲__decimal__表示的值的部分是無意義的(矛盾)。 val或者被轉換爲「base」或者不被轉換。用2和16檢查你的自我 –

+0

然後答案將打印十進制數字'0..base-1'(但不是十進制符號)。 –

+0

我剛剛意識到整個問題/解決方案是無意義的,因爲您正在轉換某些內容,並且在將其分配給'ret'時,它將轉換爲二進制文件。所以唯一可能的解決方案是在一些基礎上打印這個值。考慮二進制,八進制,十進制,十六進制:它們都是相同的位。 –

1

Coderredoc的答案顯示了一個很好的使用遞歸的解決方案。然而,問題的唯一合理的解釋是打印的Val基地:

void pose (unsigned int val, unsigned int base){ 
    if(val) { 
     pose(val/base,base); 
     printf("%c", (val%base)+'0'); 
    } 
} 


int main(void) 
{ 
    pose (8,8); printf("\n"); 
    pose (8,2); printf("\n"); 
    pose (19,5); printf("\n"); 
    return 0; 
} 

輸出:

10 
1000 
34 
+0

我upvoted bacuse它也是對的 – coderredoc