计算填充国际象棋64正方形所需的米饭总数

calculate how many total rice required to fill chess 64 squares

本文关键字:填充 国际象棋 正方形 计算      更新时间:2023-10-16

我只想计算填充64盒棋盘需要多少米排和科尔斯,然后向我展示0我认为长数据类型不足以存储我所需的输出,然后我将使用的内容。

#include <iostream>
#include<cstring>
#include<stdlib.h>
using namespace std;
long fn()
{
    int val;
    long i=1;
    for(int row=1;row<=8;row++)
    {
        for(int col=2;col<=8;col++)
        {
            val = i*2;
            i=val;
        }
    }
    return i;
}

main()
{
    cout << fn();
}

我不需要整个代码作为答案,请告诉我我要使用的数据类型,或者如果我做错了,只有建议而不是解决方案。谢谢

您需要一个64位unsigned来表示结果。

C 标准需要unsigned long long至少为该大小,因此可以使用。

顺便说一句,答案是
~(uint64_t)0;

似乎您的代码正在计算一个小于2^64的值,即18.446.744.073.709.551.616,大约1.8 * 10^19。未签名的长长int 可以存储一个值为18.446.744.073.709.551.615的值。

对于经典问题,您必须计算总和1 2 2^2 2^3 ... 2^63,是2^64-1,与无签名长的最大值相同长int。为此,修改代码如下:

unsigned long long int fn()
{
    unsigned long long int val = 0;
    unsigned long long int i = 1;
    for(int row = 1; row <= 8; row++)
    {
        for(int col = 1; col <= 8; col++)
        {
            val = val + i;
            i = i * 2;
        }
    }
    return val;
}