【发布时间】:2013-04-30 23:01:49
【问题描述】:
我在为这个问题编写 C 程序时遇到了一些问题。也许我读错了问题并且做错了。有人可以帮我吗?这就是我正在尝试的方式
#include<stdio.h>
void main(void)
{
int j, sum=0;
long int product=1;
for(j=1;j<=30;j=j+2)
{
sum=sum+j;
}
for(j=2;j<=30;j=j+2)
{
product=product*j;
}
printf("\nThe sum of positive odd numbers is: %d", sum);
printf("\nThe product of positive even numbers is: %d", product);
}
我得到的输出是:
The sum of positive odd numbers is: 225
The product of positive even numbers is: -1409286144
我弄错了产品部分。我尝试过使用 unsigned long int、long long、unsigned long long。没有任何效果。
【问题讨论】:
-
您的产品超出了存储类型的限制。尝试从
long int换成更大的存储类型。 -
2*4*8...*28 给出大约 30 位数字。你几乎需要一个浮点类型来保存它。值得一提的是:N 个连续奇数的总和(从 1 开始)得出 N 的平方,因此您可以更快更轻松地计算该部分。
-
改用模数将代码压缩为 1 个循环。伪代码 - for (j=1,j
-
您的答案应该正好适合 64 位整数。
-
这个简单产品的庞大规模是一个温和的提醒,我们应该生活在对具有阶乘时间复杂度的算法的恐惧中! =)