正整数之和 - 打印垃圾值

时间:2017-06-23 09:10:20

标签: c arrays reverse garbage sum-of-digits

程序必须接受N个整数并打印所有POSITIVE整数的和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);

}

该程序完全适用于上述两个指定的示例i / o。但是对于

  

输入: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 个答案:

答案 0 :(得分:3)

您没有为每个新偶数重置rev = 0,因此偶数值的反转值是错误的。

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

答案 1 :(得分: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;
    }

它将解决您的问题。