程序必須接受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
向我解釋爲什麼會出現這個問題,如何糾正它。
你是否已經通過調試器完成了你的程序? –
@ Jean-FrançoisFabre:我想大約20個數字的總和不應該產生溢出,除非在某個地方存在錯誤。但是正確的 - 嘗試沒有任何成本。 –
此代碼('rem = arr [i]%10; rev = rev * 10 + rem; arr [i] = arr [i]/10;')不反轉數字。要反轉它們(在數字從0到99的情況下),你可以使用'rev =(arr [i]%10)* 10 + arr [i]/10;'。在4的情況下,我寫的代碼返回40(我不知道這是否正確)。 –