每日一题:由棋盘放麦子引出Java的BigInteger
目录
一.题目引出
二.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();}
}
每日一题:由棋盘放麦子引出Java的BigInteger相关推荐
- 蓝桥杯真题练习-棋盘放麦子
蓝桥杯真题练习-棋盘放麦子 ## 填空题 2012 省赛 题目地址 题目概述 就是说有一个64个格子的棋盘,第一个格子放一粒麦子,第二个两粒,第三个四粒,第四个八粒,依次类推,最终需要多少麦子. 思路 ...
- 蓝桥云算法题之棋盘放麦子——Python满分解答
棋盘放麦子 题目描述 运行限制 解题思路 代码实现 题目描述 本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可. 你一定听说过这个故事.国王对发明国际象棋的大臣很佩服,问他要什么 ...
- LQ0262 棋盘放麦子【大数+亿进制】
题目来源:蓝桥杯2012初赛 Java C组C题 题目描述 本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可. 你一定听说过这个故事.国王对发明国际象棋的大臣很佩服,问他要什么报 ...
- 2020省赛->棋盘放麦子
棋盘放麦子 (354) (1) 题目描述 本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可. 你一定听说过这个故事.国王对发明国际象棋的大臣很佩服,问他要什么报酬,大臣说:请在第 ...
- 【蓝桥杯Java】棋盘放麦子
目录 题目描述 解题思路 BigInteger 类常用方法 解题代码 题目描述 你一定听说过这个故事.国王对发明国际象棋的大臣很佩服,问他要什么报酬,大臣说:请在第 11 个棋盘格放 11 粒麦子,在 ...
- 算法题练习:棋盘放麦子
问题描述 国际象棋共有 64格,请在第 1 个棋盘格放 1 粒麦子,在第 2 个棋盘格放 2 粒麦子,在第 3 个棋盘格放 4 粒麦子,在第 4个棋盘格放 8 粒麦子,-后一格的数字是前一格的两倍,直 ...
- 棋盘放麦子(c++版本)
题目描述 本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可. 你一定听说过这个故事.国王对发明国际象棋的大臣很佩服,问他要什么报酬,大臣说:请在第 11 个棋盘格放 11 粒麦子 ...
- Python: 棋盘放麦子
题目描述 本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可. 你一定听说过这个故事.国王对发明国际象棋的大臣很佩服,问他要什么报酬,大臣说:请在第 1 个棋盘格放 1 粒麦子,在 ...
- 蓝桥杯 棋盘放麦子<最简单写法>
题目描述 本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可. 你一定听说过这个故事.国王对发明国际象棋的大臣很佩服,问他要什么报酬,大臣说:请在第 11 个棋盘格放 11 粒麦子 ...
最新文章
- 陈春花:管理到底是什么?
- ​Google 鼓励的 13 条代码审查标准,建议收藏!
- NanoPi NEO Air使用十五:使用V4L2驱动USB摄像头
- 一文看懂 K8s 日志系统设计和实践
- 解析函數論 Page 22 級數收斂的一個充分條件
- 一文看懂数据挖掘:哪一种方法最好?都需要哪些技术?
- JavaScript进阶部分笔记
- C#实现DataTable按天分组并计数
- VBS脚本运行库 ——文本文件的建立、追加、删除等
- 象棋游戏java代码_象棋游戏 - java代码库 - 云代码
- G码云+hexo搭建博客
- 英特尔至强处理器排行_英特尔赛扬Vs之间的比较。 至强处理器
- 互联网无处不在的“推荐算法”解析
- 什么是SD-WAN?网络技术科普
- antd table修改没有数据时的显示
- 阿里云HaaS100物联网开发板学习笔记(四)轻应用初步--用javascript连接阿里云物联网平台
- 进行码分多址CDMA通信
- 手动装机太麻烦?别慌Cobbler自动装机来帮你
- cp 命令 复制文件及目录
- TCP ACKed unseen segment TCP Previous not captured