2017-11-25 56 views
-1
#include <stdio.h> 
#include <stdlib.h> 

#define TEN 10 
int main() 
{ 
int number = 0; 
int digit = 0; 
int last_digit = 0; 
int digit_sum = 0; 
int i = 0; 
while (i == 0) 
{ 
printf("Please Enter A Positive Number! \n"); //explaining 
scanf("%d",&number); 
if (number > 0) 
{ 
    i++; 
} 

} 

    while (number > 0) 
    { 
    digit = number % TEN; //breaking number into digits 
    number /= TEN; 

    if (last_digit != digit) //comparing digits 
    { 
     last_digit = digit; 
     digit_sum += digit; 
    } 


    } 


    printf("The Sum Of The Digits Is : %d",digit_sum); 
    return 0; 

}(C)代碼着的工作要條件


代碼將劃分成數位並檢查是否有被欺騙的數字,萬一有,只有其中一人將計算例如:3211 3 + 2 + 1,但我的問題是,該代碼將不會像31211數字工作我感謝任何形式的幫助。

+0

一個可能的解決方案將輸入作爲字符串讀取,對其進行排序(例如,「31211」變爲「11123」),並刪除連續的重複項(所以字符串「11123」變爲「123」),然後執行求和。 –

+2

歡迎來到SO。請參觀參觀,瞭解要問什麼問題以及如何。這裏沒有問題。此外,請在此處張貼時請正確縮進代碼。 –

+0

你能給我一個例子嗎? – SaKaMoToSaN15

回答

2

該代碼不起作用,因爲不能保證重複會出現連續的方式。你的代碼處理的不是其他方式。這就是它失敗的原因。

一個簡單的解決方案是考慮一個10個元素的數組,其中你將保持計數哪個元素出現和哪個沒有。

這個想法是將數字映射到10元素數組的數組下標。初始化爲0

... 
int digitAppeared[10]={0}; 
while (number) 
{ 
    digit = number % TEN; //breaking number into digits 
    number /= TEN; 
    digit_sum += (1 - digitAppeared[digit]) * digit; 
    digitAppeared[digit] = 1; 
} 
... 

爲了給你一個明確的概念這條線基本檢查元素是否出現與否並按照其結果會增加數字。

如果數字D出現然後digitAppeared[D]=1 並且如果它沒有然後digitAppeared[D]=0

如果它第一次出現,我們將它添加到digitsum。這就是爲什麼(1-digitAppeared[D])會告訴我們是否添加它。

digit_sum += (1 - digitAppeared[digit]) * digit; 
+0

所以我可以修復它,所以它將以無條件的方式工作?我一直在努力解決這個問題。 (我注意到了) – SaKaMoToSaN15

+0

@ SaKaMoToSaN15 .:是的,你可以。只要conmsider採取陣列就可以了。跟蹤elelemts。 – coderredoc

+0

對不起,如果我有點嘮叨我是一個初學者,所以我不真的知道如何使用數組''是否有辦法做到這一點沒有arra'ys? – SaKaMoToSaN15

0

將數字轉換爲字符串使用itoa()。排序,然後穿行,尋找唯一的編號,做你的計算

+1

請注意,'itoa'不是一個標準的C函數,它可能無處不在。 –

+0

好吧,沒問題,然後創建一個數組是一個選項。 32222 - > [3,2,2,2]然後進行計算 – stack26

0

您可以標記該數字已經通過使用由done以下程序代表設置的邏輯標誌補充說:

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
#define TEN 10 
int main() 
{ 
int number = 0; 
int digit = 0; 
int last_digit = 0; 
int digit_sum = 0; 
int i = 0; 
int done[10]; 
while (i == 0) 
{ 
printf("Please Enter A Positive Number! \n"); //explaining 
scanf("%d",&number); 
if (number > 0) 
{ 
    i++; 
} 

} 
    memset(done,0,sizeof(done)); 
    while (number > 0) 
    { 
    digit = number % TEN; //breaking number into digits 
    number /= TEN; 
     if(done[digit] == 0) 
     { 
     digit_sum += digit; 
     done[digit] = 1; 
     } 
    } 


    printf("The Sum Of The Digits Is : %d",digit_sum); 
    return 0; 
}