| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 11057 人关注过本帖
标题:怎样用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
快速回复:怎样用C语言解决象棋和麦子的问题?
数据加载中...
 
   



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

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