题目描述
印度国王使用的棋盘有N∗N 个格子(N 无限大)。现在从第一个格子开始放麦粒,第一个格子放 1 粒、第二个格子放 2 粒、第三个格子放 44 粒,第 N 个格子放 粒麦粒。请你编程计算从第K格至第M 格共有多少粒麦粒。
输入格式
K M(4<=K<M<=100),空格隔开。
输出格式
共有多少粒麦粒。(结果不超过 6 位时,直接输出结果;结果超过 6 位时,只输出结果的最高 3 位和最低 3 位,以逗号分隔)。
输入输出样例
输入#1
80 96
输出#1
792,248
代码
#include <bits/stdc++.h>
using namespace std;
int main(){
long long a,b,ans1,ans2;
cin>>a>>b;
unsigned __int128 x=1,y=0;
for(int i=a;i<=b;i++){
for(int j=2;j<=i;j++){
x*=2;
}
y+=x;
x=1;
}
if(y<1000000) printf("%d",y);
else{
ans2=y%1000;
while(y>=1000) y/=10;
ans1=y;
cout<<ans1<<',';
if(ans2<10) cout<<"00";
if(ans2<100) cout<<"0";
cout<<ans2;
}
return 0;
}