プログラムは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);
}
プログラムは、I/O、上記指定された2つの例えば完全に実行されます。しかし
入力用: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の数字の合計がオーバーフローしてはならないと思います。しかし、そうです。 –
arr [i] = arr [i]/10; ')は桁を反転しません。それらを逆にするには(0から99までの数字の場合)、 'rev =(arr [i]%10)* 10 + arr [i]/10;'を使うことができます。 4の場合、私が書いたコードは40を返します(それが正しいかどうかはわかりません)。 –