美文网首页
舍罕王的失算

舍罕王的失算

作者: 一路向后 | 来源:发表于2021-10-18 21:24 被阅读0次

    1.问题描述

    相传国际象棋是古印度舍罕王的宰相达依尔发明的。舍罕王十分喜欢象棋,决定让宰相自己选择何种赏赐。这位聪明的宰相指着8x8共64格象棋棋盘说: 陛下,请您赏给我一些麦子吧。就在棋盘的第1格中放1粒,第2格放2粒,第3格放4粒,以后每一格都比前一格增加一倍,依次放完64格,我就感激不尽了。舍罕王让人扛来一袋麦子,他要兑现承诺。请编程求出国王总共需要将多少麦子赏赐给他的宰相。

    2.源码实现

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <gmp.h>
    
    int main()
    {
        mpz_t sum, a, b;
        int i;
    
        mpz_init(sum);
        mpz_init(a);
        mpz_init(b);
    
        mpz_init_set_ui(sum, 0);
        mpz_init_set_ui(a, 2);
    
        for(i=0; i<64; i++)
        {
            mpz_pow_ui(b, a, i);
            mpz_add(sum, sum, b);
        }
    
        gmp_printf("国王总共需要赏赐给宰相的麦子数为: %Zd\n", sum);
    
        mpz_clear(sum);
        mpz_clear(a);
        mpz_clear(b);
    
        return 0;
    }
    

    3.编译源码

    $ gcc -o test test.c -std=c89 -I/usr/local/include -L/usr/local/lib64 -lgmp -Wl,-rpath=/usr/local/lib64
    

    4.运行及其结果

    ./test
    国王总共需要赏赐给宰相的麦子数为: 18446744073709551615
    

    相关文章

      网友评论

          本文标题:舍罕王的失算

          本文链接:https://www.haomeiwen.com/subject/mftooltx.html