输出100-200间所有偶数之积和奇数之积
为什么我用while语句或者for语句整合到一起算的时候输出的奇数之积为负值?
#include <stdio.h>
#include <math.h>
main()
{
int n=102;
long double odd1=100,odd2;
while (n<=200)
{
if(n%2==0)
{
odd1*=n;
n++;
}
else
{odd2=101;
odd2*=n;
n++;
}
}
printf("odd1=%d\nodd2=%d",odd1,odd2);
}
如果分开算的话就不会有这个问题。
#include <stdio.h>
main()
{
int i;
long double k=100;
for(i=102;i<=200;i+=2)
{
k=k*i;
}
printf("100-200间偶数之积为%d\n",k);
long double t=101;
for(i=103;i<=199;i+=2)
{
t=t*i;
}
printf("100-200间奇数之积为%d\n",t);
}
long double odd1=100,odd2;
改成: unsigned long double odd1=100,odd2; 在试试,有符号型的变量第一位为1的时候表示负数。
else
{odd2=101;
odd2*=n;
n++;
} 不太明白你为什么要在循环里赋odd2=101。
//这里。
while (n<=200)
{
if(n%2==0)
{
odd1*=n;
n++;
}
else
{odd2=101;//实在不理解这句放循环里的意义,拿到循环外。
odd2*=n;
n++;
}
}
还有试下将long double odd1 = 102;
long double odd2 = 101;
这两句分开定义和赋值初始化。
long double 没初始化的话,好像会直接用地址去计算。
还有出现负数也可能跟你使用的编译环境有关。
UINT64 nOdd = 1,nEven = 1;
for (int i = 101; i < 120; i ++)
{
if (i % 2 == 0)
{
nEven *= i;
}
else
{
nOdd *= i;
}
}
这么大的乘积,早已经超越了。。。
100~200之间偶数积:345484498181231072179033122945948033435772722271721910560634053031696805747770716144002015218892800000000000000
100~200之间奇数积:2445999815161523630887704671984588444168204294063971389328824409282436267548292961169809313166875301513671875