标题:怎样用C语言解决象棋和麦子的问题?
只看楼主
w4654646
Rank: 1
等 级:新手上路
帖 子:80
专家分:0
注 册:2016-3-2
结帖率:76.47%
已结贴  问题点数:10 回复次数:17 
怎样用C语言解决象棋和麦子的问题?
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
main()
{
    int n,s=0,i;
    if(n>=1&&n<=64)
    {
        do
        {
            i++;
            s=s+2^i;
        }while(i<n);
        printf("%d",s);
        return 0;
    }
    else
        exit(0);
}
相传国际象棋是古印度舍罕王的宰相达依尔发明的。舍罕王十分喜爱象棋,决定让宰相自己选择何种赏赐。这位聪明的宰相指着8X8共64格的象棋棋盘说:陛下,请您赏给我一些麦子吧。就在棋盘的第1格中放1粒,第2格放2粒,第3格放4粒,以后每一格都比前一格增加一倍,依此放完棋盘上64格,我就感激不尽了。舍罕王让人扛来一袋麦子,他要兑现他的许诺。请问,国王能兑现他的许诺吗?共要多少麦子赏赐他的宰相?
  格子数不是64呢?

输入
输入n表示格子数(n不超过64).

输出
输出麦子总数.

样例输入
3
64
样例输出
7
18446744073709551615
搜索更多相关主题的帖子: 国际象棋 国际象棋 include include return return C语言 C语言 印度 印度 
2016-03-09 10:25
w4654646
Rank: 1
等 级:新手上路
帖 子:80
专家分:0
注 册:2016-3-2
得分:0 
问题上面的代码运行结果后说n没初始化
2016-03-09 10:27
grmmylbs
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:54
帖 子:1409
专家分:5845
注 册:2016-2-14
得分:0 
n要么输入,要么给个值,你只定义了,没给值

另外有人问了同一题的其他问题,可以参考下
https://bbs.bccn.net/thread-462271-1-1.html
2016-03-09 10:29
w4654646
Rank: 1
等 级:新手上路
帖 子:80
专家分:0
注 册:2016-3-2
得分:0 
这我改出来了  但输入64时结果不对 求大神怎么做
#include<stdio.h>
#include<stdlib.h>
int main()
{
    int s=0,m=1;
    int n,i;
    scanf("%d",&n);
    if(n<=64)
    {
        for(i=1;i<=n;i++)
        {
            s=s+m;
            m=m*2;
        }
        printf("%I64d",s);
        return 0;
    }
    else
        exit(0);
}
2016-03-09 10:53
grmmylbs
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:54
帖 子:1409
专家分:5845
注 册:2016-2-14
得分:0 
int长度有限,看下我之前发的链接。
2016-03-09 10:56
qq1023569223
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:湖南科技大学
等 级:贵宾
威 望:26
帖 子:2753
专家分:13404
注 册:2010-12-22
得分:0 
回复 4楼 w4654646
你所要处理的数字已经超出了int所能表达的范围了。

   唯实惟新 至诚致志
2016-03-09 10:56
w4654646
Rank: 1
等 级:新手上路
帖 子:80
专家分:0
注 册:2016-3-2
得分:0 
我把int s=0,m=1改为__int64 s=0,m=1  可是输入64时结果为-1  改为long long也不行

[此贴子已经被作者于2016-3-9 11:02编辑过]

2016-03-09 11:00
qq1023569223
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:湖南科技大学
等 级:贵宾
威 望:26
帖 子:2753
专家分:13404
注 册:2010-12-22
得分:0 
__int64也不够大,最终结果是它最大值的两倍,多一位数。你使用unsigned long long看看。

[此贴子已经被作者于2016-3-9 11:07编辑过]


   唯实惟新 至诚致志
2016-03-09 11:06
w4654646
Rank: 1
等 级:新手上路
帖 子:80
专家分:0
注 册:2016-3-2
得分:0 
回复 8楼 qq1023569223
我使用unsigned long long后 结果为 error C2632: 'long' followed by 'long' is illegal 好像不行
2016-03-09 11:10
qq1023569223
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:湖南科技大学
等 级:贵宾
威 望:26
帖 子:2753
专家分:13404
注 册:2010-12-22
得分:0 
回复 9楼 w4654646
你可以尝试unsigned __int64,参考http://blog.

   唯实惟新 至诚致志
2016-03-09 11:17



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-462279-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.875481 second(s), 7 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved