- 舍罕王赏麦
棋盘64个格子,第一格1粒麦子,每个小格是前一个小格麦子的一倍,共多少麦子? - 分析:
- 1,2,4,,,,2n-1, sum=累加2(i-1),i=1—64
- 累加计算,temp,sum,for循环
public class wheat {
public static void main(String[]args){
int n;
double sum;
System.out.printf("请输入棋盘格数:");
Scanner input= new Scanner(System.in);
n=input.nextInt();
sum=wheat(n);
System.out.printf("共有%f颗麦子\n",sum);//sum过大20位,double类型,%f
System.out.printf("大约%f吨",sum/25000/1000);//25000粒1公斤,1000公斤是一吨
}
static double wheat(int n){
double temp=1,sum=0;
int i;//第i格
for(i=1;i<=n;i++){
sum+=temp;
temp=temp*2;//下一格多少个,注意temp、sum顺序
}
return sum;
}
/*//另一种方法:等比数列求和公式 an=a1*q^(n-1),sn=a1(1-q^n)/(1-q)
static double wheat(int n){
double sum;
sum=Math.pow(2,n)-1;//Math.pow,Math.log,Java公式
return sum;
}
*/
}