Сумма положительных целых чисел - выводит значение мусора

Программа должна принять N целых чисел и вывести сумму S всех ПОЛОЖИТЕЛЬНЫХ целых чисел с обратными четными положительными целыми числами.

Пример ввода / вывода 1:

Вход: 4 39 -8 57 24

Выход: 138

Пояснение: сумма = 39+57+42 = 138 (четное число 24 перевернуто)

Пример ввода / вывода 2:
Вход: 3 -23 -11 -445

Выход: 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);

}

Программа отлично работает для двух указанных выше примеров ввода / вывода. Но для

Вход: 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

Выход: -878418008

Объясните мне, почему возникает проблема и как ее исправить.

2 ответа

Решение

В первую очередь постарайтесь не использовать дополнительное место в scanf, это вызовет проблемы

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

тогда для вашей проблемы вы забыли сделать rev=0, таким образом, он будет иметь предыдущее значение и даст результат мусора.

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

Это решит вашу проблему.

Вы не сбрасываете rev = 0 для каждого нового четного числа, поэтому обратные значения неверны для четных чисел.

if(arr[i]>0)
{  rev = 0;
    if(arr[i]%2==0)
Другие вопросы по тегам