C++关于计算国王赏赐国际象棋发明人的问题

本人初学计算机C++语言,请问这道习题怎么做,调了很长时间了。

img


#include<iostream>
#include<cmath>
using namespace std;
int main()
{ 
int num;
cin>>num; 
int n=1;
  long long a=0;
  for(int i=1;i<60;i++)
  {
      
      a=pow(2,n-1);
      n++;
      a+=a-1;
      cout<<a<<endl;
      if(a>num)
      {
          cout<<"获得"<<num<<"颗米"<<"共需要"<<i<<"个棋格。"<<endl;
          break;
      }
      
      
  }

return 0;    
    
    
    
}
#include<cstdio>

unsigned long long n;

unsigned long long pow(int x,int y)
{
    unsigned long long p = 1;
    
    for(int l = 1;l <= y;l ++) p *= x;
    
    return p; 
}
int main()
{
    for(int i = 1;i <= 64;i ++)
    {
        unsigned long long w = pow(2,i - 1);
        
        n += w;
        
        printf("第 %d 个格子共有:%lld , 当前格子有 :%lld\n",i,n,w);
    }
}