正整数之和 - 打印垃圾值
Sum of positive integers - Prints Garbage value
程序必须接受 N 个整数,并打印所有正整数的总和 S,并将偶数正整数取反。
Example Input/Output 1:
Input: 4 39 -8 57 24
Output: 138
Explanation: The sum = 39+57+42 = 138 (The even number 24 is reversed)
Example Input/Output 2:
Input: 3 -23 -11 -445
Output: 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。但是对于
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
Output: -878418008
向我解释为什么会出现问题以及如何解决问题。
您没有为每个新的偶数重置 rev = 0,因此反转的值对于偶数是错误的。
if(arr[i]>0)
{ rev = 0;
if(arr[i]%2==0)
首先尽量不要在 scanf 中使用额外的 space 它会导致问题
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;
}
它将解决您的问题。
程序必须接受 N 个整数,并打印所有正整数的总和 S,并将偶数正整数取反。
Example Input/Output 1:
Input: 4 39 -8 57 24
Output: 138
Explanation: The sum = 39+57+42 = 138 (The even number 24 is reversed)
Example Input/Output 2:
Input: 3 -23 -11 -445Output: 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。但是对于
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
Output: -878418008
向我解释为什么会出现问题以及如何解决问题。
您没有为每个新的偶数重置 rev = 0,因此反转的值对于偶数是错误的。
if(arr[i]>0)
{ rev = 0;
if(arr[i]%2==0)
首先尽量不要在 scanf 中使用额外的 space 它会导致问题
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;
}
它将解决您的问题。