读书人

兄弟们!帮忙看看小弟我的程序错在那里

发布时间: 2012-03-07 09:13:51 作者: rapoo

兄弟们!帮忙看看我的程序错在那里了。。。简单的c语言计算
题目 2的0次方+2的1次方+2的2次方+2的3次方+。。。。。+2的16次方


我编写的程序如下

/* Note:Your choice is C IDE */
#include "stdio.h "
main()
{
int sum,j,n,k;
sum=0;
j=1;
sum=sum+j;
for (k=1;k <=17;k++)
{
for(n=1;n <=k;n++)
{
j=j*2;
}

sum=sum+j;
}
printf ( "%d ",sum);


}

认为逻辑上并没有错误,但是结果却是-31669 请问各位大虾 我错在那里了?~


[解决办法]
题目 2的0次方+2的1次方+2的2次方+2的3次方+。。。。。+2的16次方
--------------------------------
出错的原因有三个
第一 楼主题目要求只需要算到2的16次方,那么在for (k=1;k <=17;k++)中 k只能为 k <=16

第二 每次内循环完了以后,j都应该还原为1 也就是在sum=sum+j;语句后还应该有语句j=1;

第三 这个题目最后得到的正确结果应该是 131071 16位编译器下int 型最大只能表示到32758所以无法正常输出。

这是可以得出正确结果的程序,看看吧
#include "stdio.h "
main()
{
double sum,j,n,k;
sum=0;
j=1;
sum=sum+j;

for (k=1;k <=16;k++)
{

for(n=1;n <=k;n++)
{
j=j*2;
}

sum=sum+j;
j=1;
}
printf ( "%lf\n ",sum);


}

[解决办法]
楼上诸位都说得很清楚了,不过感觉
for (k=1;k <=17;k++)
{
for(n=1;n <=k;n++)
{
j=j*2;
}

sum=sum+j;
}
这段完全可以改成
j=2;
for (k=1;k <=16;k++)
{
sum=sum+j;
j*=2
}

读书人网 >C++

热点推荐