大数字运算

1.使用java中的BigInteger或BigDecimal类
2.自己实现
- 1.大数字加法:将加数和被加数按数n分组,然后每组进行相加,当某组数超过n个数字时,向前进1
如:123456+456789,三个数分一组,则分为123 456+456
789,789+456=1245,123+456=579,由于789+456>1000,因此,向前进1,则低位为245,高位为579+1=580,因此,结果为580245
- 2.大数字减法:将减数和被减数按数n分组,从低位组到高位组逐一相减,当某个组相加为负数时,向前进-1,并加上10的n次幂 如:789456-456789,三个数分一组,则分为789-456=333,456-789=-333,由于低组相减为-333,则向前进-1,并加上1000(10^3)为-333+1000=667,高位为333-1=332,因此,结果为332667
- 3.大数字乘法:将乘数和被乘数各分成两组,然后低位低位,高位低位+低位高位+进位(高位和低位分别来自与不同组),高位高位+进位 如,1234*5678,各分成两组然后求出各个组数
值,34*78=2652,12*78+34*56=2840,12*56=672,低位2652进位26,留下52,2840+26=2866,进位28留下66,672+28=700,进位7,留下00,则结果为7006652
- 4.大数字除法:使用反复相减法,想将除数按照一定的倍数扩张,然后相减,直到不能减,再收缩一个倍数,继续前面步骤 如:12345/123,先123*100=12300,12345/12300=1 余数:45,再45/1230=0 余数:45
最后45/123=0 余数:45,因此,结果为100 余数:45

具体实现代码如下:

import java.io.*;
import java.util.*;
class test  
{

    public static void main (String[] args) throws java.lang.Exception
    {
        String m1="123,456,789";
        String m2="789";
        String sz1[] = m1.split(",");
        String sz2[] = m2.split(",");
        int maxLength= sz1.length>sz2.length?sz1.length:sz2.length;//最大分组数
        int num1[],num2[];
        num1 = new int[maxLength];num2=new int[maxLength];
        transform(sz1,num1);transform(sz2,num2);
        System.out.println("加法:"+add(num1,num2,1000,12));
        System.out.println("减法:"+subtract(num1,num2,1000));
        System.out.println("乘法:"+mutiply(num1,num2));
        test2();
    }
    //除法
    public static void test2(){
        String m1="123,456,789";
        String m2="789";
        String sz1[] = m1.split(",");
        String sz2[] = m2.split(",");
        int maxLength= sz1.length>sz2.length?sz1.length:sz2.lengt
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值