舍罕王赏麦算法

印度有一个饶有趣味的故事。传说舍罕王打算重赏象棋的发明人、宰相西萨达依尔。国王问他有何要求,这位聪明的大臣胃口看来并不大,他跪在国王面前说:"陛下,请您在这张棋盘的第一个小格内,赏给我一粒麦子,在第二个小格内给两粒,第三格内给四粒,照这样下去,每一个小格内都比前一小格加一倍。陛下啊,把这样摆满棋盘上所有64格的麦粒,都赏给您的仆人罢。"国王一听,认为这区区赏金,微不足道。于是,满口答应道:"爱卿,你所求的并不多啊,你当然会如愿以偿。"

问题:舍罕王需要赏赐出多少粒麦子.

package suanfa;
import java.util.Scanner;


public class Example_1 {
	/**
	 * 舍罕王赏麦算法
	 */
	static double mai(int n)					
	{
		int i;
		double temp,sum;

		temp=1;
		sum=1;						

		for(i=1;i<=n-1;i++)				
	    {
	        temp=temp*2;
	        sum=sum+temp;
	    }
		return sum;
	}
	public static void main(String[] args) {
		int n;
		double sum;
		System.out.printf("舍罕王赏麦问题求解!\n");
		System.out.printf("输入棋盘格总数:");
	    Scanner input=new Scanner(System.in);
		n=input.nextInt(); 
		sum=mai(n);					
		System.out.printf("舍罕王赏总麦粒数为:%f粒,\n",sum);
		
	}

}

结果 为

舍罕王赏麦问题求解!
输入棋盘格总数:64
舍罕王赏总麦粒数为:18446744073709552000.000000粒,

而实际的真实结果是18446744073709551616,原因是因为double的有效位是16位(十进制),小数点后面默认输出6位



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值