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; }