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 -445sortie: 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.
Avez-vous parcouru votre programme avec le débogueur? –
@ 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. –
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). –