每日一题:由棋盘放麦子引出Java的BigInteger

导读:本篇文章讲解 每日一题:由棋盘放麦子引出Java的BigInteger,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

目录

一.题目引出

二.BigInteger了解

1.赋值

2.运算:

3.对比

4.转换进制

3.输出

 三.解答


一.题目引出

你一定听说过这个故事。国王对发明国际象棋的大臣很佩服,问他要什么报酬,大臣说:请在第 11 个棋盘格放 11 粒麦子,在第 22 个棋盘格放 22 粒麦子,在第 33 个棋盘格放 44 粒麦子,在第 44 个棋盘格放 88 粒麦子,……后一格的数字是前一格的两倍,直到放完所有棋盘格(国际象棋共有 6464 格)。

国王以为他只是想要一袋麦子而已,哈哈大笑。

当时的条件下无法准确计算,但估算结果令人吃惊:即使全世界都铺满麦子也不够用!

请你借助计算机准确地计算,到底需要多少粒麦子。

思考:

如果这题用java写的话,我们知道,java最大的基本数据类型为long类型,而由粗略计算可知不满足条件,至少为unsigned long long的数据类型才可以满足条件,用c语言是可以写出来的,但是用java基本数据类型是无法写出来的

但是我们知道JAVA里面有一个类为BigInteger类可以满足:

java.math包的Biglnteger可以表示不可变的任意精度的整数。BigInteger提供所有Java的基本整数操作符的对应物,并提供java.lang.Math的所有相关方法。另外,Biglnteger 还提供以下运算:模算术、GCD计算、质数测试、素数生成、位操作以及一些其他操作。

二.BigInteger了解

1.赋值

BigInteger提供两种赋值方法

BigInteger a=new BigInteger(“15”);   默认为10进制形式转换为BigInteger

System.out.println(new BigInteger("15"));//15

BigInteger b=BigInteger.valueOf(1);   为long类型的数字,为10进制

System.out.println(BigInteger.valueOf(15));//15

BigInteger c=new BigInteger(“1”,int radix);填一个进制,相当于Integer.parseInt(String s,int radix)

将一个radix进制的数转换为BigInteger,也就是Integer数存入

System.out.println(new BigInteger("1001",2));  //9
System.out.println(new BigInteger("AA",16));   //170

2.运算:

①a. add(b);

System.out.println(BigInteger.valueOf(15).add(BigInteger.valueOf(15)));  //30

②subtract(); 相减 

System.out.println(BigInteger.valueOf(15).subtract(BigInteger.valueOf(10))); //5

③multiply(); 相乘 

System.out.println(BigInteger.valueOf(2).multiply(BigInteger.valueOf(10)));//20

④divide(); 相除取整 

System.out.println(BigInteger.valueOf(20).divide(BigInteger.valueOf(10)));  //2

⑤remainder(); 取余 

System.out.println(BigInteger.valueOf(11).remainder(BigInteger.valueOf(6)));  //5

⑥pow(); a.pow(b)=a^b         要注意b为int类型

System.out.println(BigInteger.valueOf(2).pow(5));  //32

⑦gcd(); 最大公约数 

System.out.println(BigInteger.valueOf(2).gcd(BigInteger.valueOf(10)));  //2

⑧abs(); 绝对值

System.out.println(BigInteger.valueOf(-10).abs());   //10

⑨negate(); 取反数 

System.out.println(BigInteger.valueOf(10).negate());  //-10

⑩mod(); a.mod(b)=a%b=a.remainder(b);

3.对比

两个bigInteget不能直接比较大小,但是可以判断是否相等

比如a==b,返回boolean(true or false)

int compare = a.compareTo(b);;  如果a>b,就返回1,相等返回0,a<b返回-1

BigInteger max = a.max(b);  返回a和b中较大的那个值

4.转换进制

a.toString(int radix),将BigInteger的数转换为radix进制的数,最后的结果为字符串

如:System.out.println(new BigInteger(“15”).toString(2));//1111

3.输出

由于BigInteger重写了toString方法,所以可以直接输出

System.out.println(a);

 三.解答

了解了之后我们便可以根据BigInteger写出这一题的结果

import java.util.Scanner;
import java.math.BigInteger;
// 1:无需package
// 2: 类名必须Main, 不可修改

public class Main {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        //在此输入您的代码...
        BigInteger count= BigInteger.valueOf(0);
         BigInteger x= BigInteger.valueOf(1);
          BigInteger a= BigInteger.valueOf(2);
          for(int i=0;i<64;i++){
            count=count.add(x);
            x=x.multiply(a);


          }
          System.out.println(count);
        scan.close();
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/101085.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!