大数的加减乘除运算

序言介绍

前几天参加一个抽签活动,我看着它给的抽签规则那么详细,就萌发了想自己编程计算结果的想法。但是发现,里面遇到的运算虽然是乘法和减法,但涉及的不是寻常数字,而是大数。这个是我之前没遇到的,所以带着好奇和求知的努力,这篇文章出现了。

什么是大数

大数可能很多人第一感觉就是很大的数,我也是这么理解的。我觉得所有不能用编程语言已有的数字类型表示的数都可以叫大数。比如50!或者2的50次方,都远超出了int的范围。就算在long或者double表示范围内的,那它的运算绝对也不简单。
另外,大数在面试或者算法里也常常出现。

运算–乘法

我先做乘法的原因很简单,开头故事里的抽签规则就是先做的乘法。
先说下我的思路,不考虑负数(虽然判断一下也很简单)、复数、几进制等问题,采用竖式乘法,用一个二维数组存放大数和结果,每个元素都是0到9的一位数字。如果超过了9,分别用除以10和对10取模得到十位和各位的数字。然后按照数学运算法则,个位保留,十位数进位。最后,我选择二位数组,也是我想到这样和真正的竖式乘法很相像。
我画了一个草图,123*34的运算。右边更好的示意我的思路,从下标小的位置代表数字的低位,0一行表示了“34”中各位4乘以“123”后的结果,按照上一段的描述,一位一位的乘,然后保证超过10就进位。1一行,开始的0原理和竖式乘法中十进制的“3”乘以“123”一样。最后红色那一行同理。
在这里插入图片描述
最后拿到了数组,可以拼接成字符串,然后去零,再逆序一下。以为这里是低位在前。

代码

import java.util.Scanner;

public class BigNumber {
   
	public static void main(String[] args) {
   
		BigNumber bigNumber = new BigNumber();
		Scanner sc = new Scanner(System.in);
		String fString = sc.nextLine();
		String sString = sc.nextLine();
		int fPoint = 0, sPoint = 0;

		while (fString.endsWith("0")){
   
			fPoint = fPoint +1;
			fString = fString.substring(0, fS
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值