2017-06-23 8 views
0

Das Programm muss N ganze Zahlen annehmen und die Summe S aller POSITIVEN ganzen Zahlen mit den geraden positiven ganzen Zahlen drucken, die umgekehrt sind.Summe der positiven ganzen Zahlen - Drucke Müllwert

Beispiel Input/Output 1:

Input: 4 39 -8 57 24

Output: 138

Erläuterung: Die Summe = 39 + 57 + 42 = 138 (die Zahl 24 ist auch umgekehrt)

Beispiel Input/Output 2:
Eingang: 3 -23 -11 -445

Ausgang: 0

#include<stdio.h> 
#include <stdlib.h> 

int main() 
{ 
int n,i,arr[100000],count=0,rem,rev=0; 

scanf("%d",&n); 
for(i=0;i<n;i++) 
{ 
    scanf("%d ",&arr[i]); 
} 

for(i=0;i<n;i++) 
{ 
    if(arr[i]>0) 
    { 
     if(arr[i]%2==0) 
     { 
      while(arr[i]!=0) 
      { 
       rem=arr[i]%10; 
       rev=rev*10+rem; 
       arr[i]=arr[i]/10; 
      } 
      count=count+rev; 
     } 
     else 
     { 
      count=count+arr[i]; 
     } 

    } 
} 
printf("%d",count); 

} 

Das Programm läuft perfekt für das beide oben genannte angegebene Beispiel i/o. Aber für

Input: 32

-89 90 -13 27 63 72 -17 33 58 73 -55 -46 -64 -65 87 62 -76 -13 -50 6 22 70 87 -39 -24 98 -31 -6 39 -80 46 -54

Ausgang: -878418008

mir erklären, warum das Problem auftritt, und wie es zu korrigieren.

+0

Haben Sie Ihr Programm mit dem Debugger durchgegangen? –

+0

@ Jean-François Fabre: Ich nehme an, dass eine Summe von etwa 20 Zahlen keinen Überlauf ergeben sollte, es sei denn, es gibt irgendwo einen Fehler. Aber richtig - der Versuch kostet nichts. –

+0

Dieser Code ('rem = arr [i]% 10; rev = rev * 10 + rem; arr [i] = arr [i]/10;') invertiert die Ziffer nicht. Um sie zu invertieren (im Falle von Zahlen von 0 bis 99) können Sie 'rev = (arr [i]% 10) * 10 + arr [i]/10;' verwenden. Im Falle von 4 gibt der Code, den ich geschrieben habe, 40 zurück (ich weiß nicht, ob das korrekt ist). –

Antwort

2

zunächst versuchen, nicht mehr Platz in scanf verwenden wird es verursachen Problem

for(i=0;i<n;i++){ 
scanf("%d",&arr[i]);} 

dann für Ihr Problem Sie rev = 0 zu machen vergessen so wäre es vorherigen Wert haben und Müll Ergebnis produzieren .

if(arr[i]%2==0) 
    { 
     rev=0; 
     while(arr[i]!=0) 
     { 
      rem=arr[i]%10; 
      rev=rev*10+rem; 
      arr[i]=arr[i]/10; 
     } 
     count=count+rev; 
    } 

Es wird Ihr Problem lösen.

3

Sie setzen für jede neue gerade Zahl nicht rev = 0 zurück, daher sind die umgekehrten Werte für gerade Zahlen falsch.

if(arr[i]>0) 
{ rev = 0; 
    if(arr[i]%2==0) 
Verwandte Themen