2011-11-29 42 views
0

我正在嘗試製作一個C函數,它會要求用戶輸入一個數字(44634329)並將數字scanf保存到一個變量中,並且將逐個數字,並找出最大的數字。查找十進制數中的最大數字

http://pastebin.com/tF7PVtvg - 這是我的項目到目前爲止

void extractLargestDigit() { 

int i; 
i = 0; 
int v; 
v = 0; 
int x; 
x = 0; 

printf("Enter an integer : "); 
scanf("%d", &x); 

    i = x % 10; 
x = x/10 % 10; 

if(i >= x) { i = i; x = x/10 % 10;} 
if(x >= i) { i = x; x = x/10 % 10;} 
if(x = 0) { i = i;} 

就在這裏,我想使程序循環,這樣它會繼續循環,直到x等於0,我希望這會使i成爲該數字中最大的值,並將如此顯示。我還必須顯示最大的數字出現在哪一點,比如542356976,最右邊的6位在第一位數字,第九位在第三位數字,我需要顯示最大數字出現在哪裏數量和還沒有完全想通了這一點

printf("\nThe largest digit : %d\n", i); 
    printf("\nIts position :); 


    return; 
} 

任何幫助或洞察力將是真棒

+0

其實我編輯的代碼稍微使了使用的V心不是,林不知道,這是尤爲明顯 – user1070226

+1

只是一個建議,這將有助於你的老師或其他人閱讀你的代碼:給你的變量有意義的名字經常幫助可讀性和減少調試時間,因爲您不必遍歷代碼並找出每個變量的用途。例如,通過簡單地查看'int x',我不知道它代表什麼。 'int input'可能是一個更好的定義。 –

回答

2

我會做它用不同的方式:

void extractLargestDigit() { 

    printf("Enter an integer : "); 
    scanf("%d", &x); 
    int max = -1; // so it will always be less than any first digit 

     while (x >0){ 
      int digit = X %10; //grab last digit 
      x = x/10;  //throw last digit away 
      if (max < digit)  //if this digit is grater than current max... 
       max = digit;  //... update it! 
    } 

    return max; 
} 

這樣,你遍歷每個數字反過來,而最大的將是max varible。

+0

老兄,這是完全錯誤的....'如果(最大<數字)最大=數字' – st0le

+0

@ st0le你爲什麼這麼想?基本上它會檢查最大數字是否低於正在評估的數字。如果是這種情況,考慮到迄今爲止評估的是什麼,比這個數字應該是最大值,並且最大值被更新。我錯了嗎? – Metalcoder

+0

被評估的數字在變量'digit'中,不是嗎? – st0le

2

所以你要使用一個循環即可。

do { 
    // grab input, process... 
} while(x != 0); 

也...

if(x = 0) 

這是一個任務,即X將總是時執行和if塊將永遠不會進入等於零。如果你想檢查平等,使用==

if(x == 0) 
1

您需要一個循環。事情是這樣的:

while (x != 0) 
{ 
    // ... 

    x /= 10; 
} 

在循環中,檢查當前的最後一個數字(這是x % 10),以及跟蹤最大。

0

你想要的東西,如:

while(x>0) 
{ 
    i=x%10; 
    x/=10; 
    // here check to see if 'i' is the biggest so far 
} 

另外,不要使用單字母名稱的變量。很容易忘記它們是什麼。 (事實上​​,我不能告訴你的代碼中哪個變量應該追蹤到目前爲止發現的最大數字。)

+0

這幫助我通過循環,所以我不斷地移動數字,但即時通訊如果我是> x停止和printf我和它的位置的問題 – user1070226

+0

爲什麼你會比較'i'到'x'?你想把'i'與你迄今爲止發現的最大數字進行比較,如果它更大,則將'i'作爲新的最大數字。 –

5

爲什麼輸入必須被視爲一個整數?您可以考慮將輸入視爲字符串。然後,每個數字是一個由ASCII字符組成的數組char,這使得循環訪問數字變得非常簡單。

通過查看ascii表,您會注意到ascii數字0-9的數字值是按升序排列的,這意味着比較它們是最大的,這很容易。

0

你的代碼有點難以閱讀,因爲它現在已經格式化了。試試這個(你的教授會感謝你),因爲我認爲它會幫助你更好地理解你必須做的事情。我已經給你提示你下一步可能需要做什麼。

void extractLargestDigit() { 
    int i = 0; /* You can declare and initialise at the same time, by the way */ 
    int v = 0; 
    int x = 0; 

    printf("Enter an integer : "); 

你想繼續做這件事和功能的結束之間的一切,直到用戶輸入一個零。你需要一個循環結構; C提供了一些。請閱讀do...whileforwhile循環,您將找到滿足您需求的內容。

scanf("%d", &x); 

    i = x % 10; 
    x = x/10 % 10; 

    if(i >= x) { 
     i = i; 
     x = x/10 % 10; 
    } 
    if(x >= i) { 
     i = x; 
     x = x/10 % 10; 
    } 
    if(x = 0) { /* Something's not right here */ 
     i = i; 
    } 
} 
+0

此功能是幫助很多,我遇到的問題是如果我輸入一個數字3287401,然後我出來作爲1,我明白你在這裏做的循環過程,如果我是更大或等於x將i設置爲i並繼續循環,如果x大於或等於i,則將x設置爲i並繼續循環,並且當x = 0時將i設置爲i,但是其中一些數字已經在0之內,所以我加入了像x = x/10%10;在i = i之後;但仍然有一些問題。 – user1070226