c++里的一个国际象棋棋盘问题

来源:百度知道 编辑:UC知道 时间:2024/05/19 22:08:33
不明白为什么我的程序就是通不过 难道有什么特殊数字没有考虑吗 请高手们指点
问题:Description
在8×8的国际象棋的棋盘上,第一格放一粒米,第二格放二粒米,第三格放四粒米,第四格放八粒米,以此类推,后一格放的米粒的数量是前一格的两倍。请编写一个程序,求出前n格共需要几粒米。
The Input
你的程序需要从标准输入设备(通常为键盘)中读入多组测试数据。所有数据前后没有多余的空行,两组数据之间也没有多余的空行。每组数据一行,输入一个正整数n (1≤n≤60),在行首和行尾没有多余的空格。
The Output
对每组测试数据,你的程序需要向标准输出设备(通常为启动该程序的文本终端,例如你在Windows中启动该程序所用的命令行终端)依次输出从标准输入设备中读入的每一组测试数据对应的结果。所有数据前后没有多余的空行,两组数据之间也没有多余的空行。每组输出数据由一行组成,输出前n格共需要放多少粒米。

#include<iostream>
#include<iomanip>
using namespace std;
int main()
{int n;
long double sum,k;
while(cin>>n)
{sum=0;k=1;
for(int i=1;i<=n;i++)
{sum=sum+k;
k=k*2;
}
cout<<fixed<<setprecision(0)<<sum<<endl;
}
return 0;
}

long double有效数字的位数不够
如果是2的60次方,long double看不出那个数各位是多少

把long double改成long long,然后去掉精度控制
输出要用printf对应的%I64d(如果我没记错的话)

您好程序没有问题~
vc下测试过~