2223 - a1002

已知国际象棋是8*8=64格,在第一个格子里面放1粒麦子,第二个格子放两粒,第三个格子放4粒麦子,以此类推, 每一个格子所放麦粒数是前一格子的2倍, 一直放到第64个格子。编程求一共需要多少麦粒(注意数据类型!!!这里要好好想想呀)?

题目输入

题目输出

输入/输出样例

题目输入


                

题目输出


                

C语言解答

#include<stdio.h>
int main()
{
  long long unsigned sum,p;
   sum=p=1;
    int i;
    for(i=1;i<64;i++)
    {
        p*=2;
        sum+=p;
    }
    printf("%llu\n",sum);
    return 0;
}

C++解答

#include <iostream>
#include <vector>
using namespace std;

// vector都是反过来的
vector<int> add(vector<int> &a, vector<int> &b) {
    if (a.size() < b.size()) {
        return add(b, a);
    }
    vector<int> res;
    int t = 0;
    for (int i = 0; i < a.size() || t; i++) {
        if (i < a.size()) {
            t += a[i];
        }
        if (i < b.size()) {
            t += b[i];
        }
        res.push_back(t % 10);
        t /= 10;
    }
    return res;
}

vector<int> mul(vector<int> &a, int b) {
    vector<int> res;
    int t = 0;
    for (int i = 0; i < a.size() || t; i++) {
        if (i < a.size()) {
            t += a[i] * b;
        }
        res.push_back(t % 10);
        t /= 10;
    }
    return res;
}

int main()
{
    int n = 64;
    vector<int> t = {1}, sum = {0};
    for(int i = 1; i <= n; i++) {
        sum = add(sum, t);
        t = mul(t, 2);
    }
    for(int i = sum.size() - 1; i >= 0; i--) {
        cout << sum[i];
    }
    cout << endl;
    return 0;
}

时间限制 1 秒
内存限制 128 MB
讨论 统计
上一题 下一题