棋盘上的粮食c++求解

. 棋盘上的粮食
【问题描述】
传说,古印度有一个人发明了一种游戏棋,棋盘共64格,玩起来十 分新奇、有趣。他把这种棋献给了国王。国王玩得十分开心,便下 令赏赐献棋人。臣下问献棋人想要什么。献棋人说:他只需要粮 食,要求大王给点粮食便心满意足了。问他需要多少粮食,他说只 要求在棋盘的第一个格子里放一粒米,在第二个格子放两粒米,第 三个格子里放四粒米,总之,后面格子里的米都比它前一格增大一 倍,把64格都放满了就行。国王一听,满口答应。大臣们也都认 为:这点米,算得了什么,便领献棋人去领米。岂料,到后来把所
有仓库里的存米都付出了,还是不够。你知道这是为什么吗?
已知国王一共有N粒米,求最多可以摆满多少个格子,(格子里面的
米粒数量满足献棋人的要求则为摆满,例如第一个格子摆放1粒米就满
了,第2个格子摆放2粒米就满了,依次类推)。
输入:包含一个正整数N;
输出:包含一个正整数,即可以摆放米粒的格子数。
【样例输入】
10000000
【样例输出】
23

你好,如有帮助,麻烦采纳一下


#include<stdio.h>
#include<stdlib.h>

double A(int n);

int main()
{
    double n=0,m;
    int i;
    for(i=0;i<64;i++)
    {
        m=A(i);
        n+=m;
    }
    printf("sum = %e\n",n);
    return 0;
}

double A(int n)
{
    int i;
    double m=1;
    if(n!=0)
    {
        for(i=1;i<=n;i++)
        {
            m*=2;
        }
    }
    return m;
}