c++中大数出现误差的问题

代码如下
1.
#include
#include
#include
using namespace std;
int main()
{
int n;

cin>>n;
printf("%0.lf\n",pow(2.0,n));
return 0;
}
测试数据
图片说明
而正确的结果应该是这个数字减2
2.
另外,我也尝试了自己编写一个函数求n次方
#include
using namespace std;
long long po(int x)
{
if(x==0) return 1;
return 2*po(x-1);
}
int main()
{
int n;
cin>>t;
cin>>n;
cout<<po(n)<<endl;
}
return 0;
}
这段代码求出的结果就是正确的
查了一些资料也没搞清楚,请教大神 谢谢 -<-

图片说明
我不知道你用的什么编译器,我用的DEVC++,答案是正确的,程序没问题

你用计算器算算,2^59次方是多少,你是不是晕菜了。longlong的长度在你的系统上是几个字节的,没有越界么?

图片说明