2017-06-23 6 views
0

Le programme doit accepter N entiers et imprimer la somme S de tous les entiers POSITIF avec les entiers positifs pairs inversés.Somme des entiers positifs - Imprime la valeur de la poubelle

Exemple Entrée/Sortie 1:

entrée: 4 39 -8 57 24

sortie: 138

Explication: La somme = + 57 + 39 = 42 138 (le même numéro 24 est inversée)

Exemple d'entrée/sortie 2:
Entrée: 3 -23 -11 -445

sortie: 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); 

} 

Le programme fonctionne parfaitement pour les deux ci-dessus spécifiée exemple i/o. Mais pour

entrée: 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

sortie: -878418008

me expliquer pourquoi le problème se produit et comment la corriger.

+0

Avez-vous parcouru votre programme avec le débogueur? –

+0

@ Jean-François Fabre: Je suppose qu'une somme d'environ 20 chiffres ne devrait pas donner lieu à un débordement, sauf s'il y a un bug quelque part. Mais bon - l'essai ne coûte rien. –

+0

Ce code ('rem = arr [i]% 10; rev = rev * 10 + rem; arr [i] = arr [i]/10;') n'invertit pas le chiffre. Pour les inverser (dans le cas des nombres de 0 à 99), vous pouvez utiliser 'rev = (arr [i]% 10) * 10 + arr [i]/10; Dans le cas de 4 le code que j'ai écrit renvoie 40 (je ne sais pas si c'est correct). –

Répondre

2

d'abord essayer de ne pas utiliser l'espace supplémentaire dans scanf il causera problème

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

alors pour votre problème, vous avez oublié de faire rev = 0 donc aurait valeur précédente et produire résultat des ordures .

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; 
    } 

Cela résoudra votre problème.

3

Vous ne réinitialisez pas rev = 0 pour chaque nouveau nombre pair, donc les valeurs inversées sont erronées pour les nombres pairs.

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