首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

兄弟们!帮忙看看小弟我的程序错在那里了。简单的c语言计算

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

兄弟们!帮忙看看我的程序错在那里了。。。简单的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
}

热点排行