Java中两个大数之间的相关运算及BigInteger代码示例

Java中两个大数之间的相关运算及BigInteger两段实例代码,具体如下。

大数相减

import java.util.Scanner;
/*
 进行大数相减,只能对两个正数进行相减
*/
public class BigNumber
{
	public static void main(String[] args)
	  {
		Scanner scan=new Scanner(System.in);
		String a,b;
		while (scan.hasNext())
		    {
			BigNumber big=new BigNumber();
			a=scan.nextLine();
			b=scan.nextLine();
			System.out.println(big.bigNumberSub(a,b));
		}
	}
	public String bigNumberSub(String x,String y)
	  {
		//String result=null;
		char[] a=x.toCharArray();
		char[] b=y.toCharArray();
		int lenA=a.length;
		int lenB=b.length;
		int len=lenA>lenB?lenA:lenB;
		int[] result=new int[len];
		//字符串反转
		char[] A=new char[lenA];
		char[] B=new char[lenB];
		for (int i=0;i<lenA;i++)
		    {
			A[i]=a[lenA-i-1];
		}
		for (int j=0;j<lenB;j++)
		    {
			B[j]=b[lenB-j-1];
		}
		//判断最终结果的正负
		char sign='+';
		if (lenA<lenB)
		    {
			sign='-';
		} else if(lenA>lenB)
		    {
			sign='+';
		} else
		    {
			for (int i=lenA-1;i>=0;i--)
			      {
				if (A[i]<B[i])
				        {
					sign='-';
					break;
				} else if(A[i]>B[i])
				        {
					sign='+';
					break;
				}
			}
		}
		//
		int aint,bint;
		for (int i=0;i<len;i++)
		    {
			aint=i<lenA?A[i]-'0':0;
			bint=i<lenB?B[i]-'0':0;
			if (sign=='+')
			      {
				result[i]=aint-bint;
			} else
			      {
				result[i]=bint-aint;
			}
		}
		//借位处理
		for (int j=0;j<len;j++)
		    {
			if (result[j]<0)
			      {
				result[j+1]=result[j+1]-1;
				result[j]=result[j]+10;
			}
		}
		//将结果对应为0的位置取消掉
		StringBuilder sb=new StringBuilder();
		Boolean flag=true;
		//防止结果集中的地位出现0
		if (sign=='-')
		    {
			sb.append(sign);
		}
		for (int i=len-1;i>=0;i--)
		    {
			if (result[i]==0&&flag)
			      {
			} else
			      {
				sb.append(result[i]);
				flag=false;
			}
		}
		return sb.toString();
		//return result;
	}
}

结果:

在Java中,还可以通过BigInteger类来解决精度问题。

import java.util.Scanner;
import java.math.BigInteger;
/*
 进行大数相加,
*/
public class BigNumber
{
	public static void main(String[] args)
	  {
		Scanner scan=new Scanner(System.in);
		while (scan.hasNext())
		    {
			BigInteger b1=new BigInteger(scan.nextLine());
			BigInteger b2=new BigInteger(scan.nextLine());
			System.out.println(b1.add(b2));
			//System.out.println(000);
		}
	}
}

结果

接着再看一则代码示例:

/**
 * 大数运算
 * BigInteger
 * 求91的5次方
 * 求它除以100的余数
 * 大数运算Biginteger类的方法调用
 */
package com.test1;
import java.math.*;
import java.math.BigInteger;
public class test100 {

  /**
   * @param args
   */
  static BigInteger k=BigInteger.valueOf(1);
  static BigInteger j=BigInteger.valueOf(91);
  static BigInteger n;
  BigDecimal l=new BigDecimal("100");
  static BigInteger m=new BigInteger("100");
  public static void main(String[] args) {
    // TODO Auto-generatedmethod stub

//   k=BigInteger.valueOf(1);
//   k=new BigInteger("1");
    for(int i=1;i<=5;i++){
      k=k.multiply(j);
      System.out.println(k.toString());
//     n=k.remainder(m);
      n=k.remainder(m);
      System.out.println(n.toString());

    }

  }

}

结果:

总结

以上就是本文关于Java中两个大数之间的相关运算及BigInteger代码示例的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站:

java算法实现红黑树完整代码示例

java实现的各种排序算法代码示例

Java小程序计算圆周率代码

如有不足之处,欢迎留言指出。

(0)

相关推荐

  • Java实现大数运算的实例代码

    一.大数运算介绍 大数运算,顾名思义,就是很大的数值的数进行一系列的运算.它是指由于编程语言提供的基本数值数据类型表示的数值范围有限,不能满足较大规模的高精度数值计算,因此需要利用其他方法实现高精度数值的计算,于是产生了大数运算. 二.Java实现大数运算方法 在BigDecimal用法详解这篇文章中给大家介绍了Java中的大数类BigDecimal的用法,那么在Java中我们实现大数运算时便可以使用这个类进行快速简便的实现. 实现代码如下: import java.math.BigDecima

  • Java常用数字工具类 大数乘法、加法、减法运算(2)

    上篇分享了一下数字转汉字的小功能,这里再分享一下大数相乘.相加.相减的功能.其他的不做过多的铺垫了,我先讲一下各个功能的计算原理. Ⅰ. 乘法运算 为什么先说乘法运算--因为我先做了乘法运算.其实思路也是很多的,但是最终我参考了网络上的一种计算方案,然后做了很多的修改.感觉这个在思路上应该是比较简单的. 简单点说:把数拆分成整数小数分别进行乘法运算,然后将结果放入一个特定长度的数组中,在放入是要计算存放的偏移位置,最后再对这个进行处理(进位.标记等),得到最终的结果. 是不是有点晕.请我详细说一

  • java大数乘法的简单实现 浮点数乘法运算

    复制代码 代码如下: import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.regex.Matcher;import java.util.regex.Pattern; /** * 大数乘法的简单实现, 目前还不是很完善 * Fix:  * 1. 修改前后删除0的一些错误情况 * 2. 支持负数运算 * 3. 判断输入字符串是否符合小数定义

  • Java大数字运算之BigInteger 原创

    在 Java 中,有许多数字处理的类,比如 Integer 类.但是Integer 类有一定的局限性,下面我们就来看看比 Integer 类更厉害的一个,BigInteger类. BigInteger类型的数字范围较 Integer 类型的数字范围要大得多.我们都知道 Integer 是 Int 的包装类,int 的最大值为 231-1,如果要计算更大的数字,使用Integer 数据类型就无法实现了,所以 Java 中提供了BigInteger 类来处理更大的数字. BigInteger 支持任

  • Java中两个大数之间的相关运算及BigInteger代码示例

    Java中两个大数之间的相关运算及BigInteger两段实例代码,具体如下. 大数相减 import java.util.Scanner; /* 进行大数相减,只能对两个正数进行相减 */ public class BigNumber { public static void main(String[] args) { Scanner scan=new Scanner(System.in); String a,b; while (scan.hasNext()) { BigNumber big=

  • java实现两个文件的异或运算

    本文实例为大家分享了java实现两个文件的异或运算的具体代码,供大家参考,具体内容如下 以下代码是将两个大小相同的文件异或之后生成一个新的文件,具体思想是用FileInputStream方法读取文件,以字节为单位对两个文件进行异或运算,然后用FileOutputStream方法输出文件,具体代码如下: import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.

  • Android 中两个Activity 之间的传值问题

    Android 中两个Activity 之间的传值问题 在Android项目中,有时需要一些全局的静态变量来保存一些数据,这样在关闭赋值界面后,其他的页面还可以调用这些数据. 但是我们知道,在Java中全局静态变量(java中没有全局变量这一个概念,但是java提供了public static关键字来实现一些类似于全局变量的关键字)都是在程序加载时就放人到内存中,它是存储在方法区里的.如果程序不结束,它将一直存在.这是会影响到系统的性能的.那么在android中可不可以不通过这种方式来传递值呢?

  • Java中父类和子类之间的转换操作示例

    本文实例讲述了Java中父类和子类之间的转换操作.分享给大家供大家参考,具体如下: 一.父类引用强转成为子类引用 package learn20180720; public class People { private String name; private Integer age; private Double height; public People(){ this.name = ""; this.age = 0 ; this.height = 0.0; } public Pe

  • 详解Java中两种分页遍历的使用姿势

    在日常开发中,分页遍历迭代的场景可以说非常普遍了,比如扫表,每次捞100条数据,然后遍历这100条数据,依次执行某个业务逻辑:这100条执行完毕之后,再加载下一百条数据,直到扫描完毕 那么要实现上面这种分页迭代遍历的场景,我们可以怎么做呢 本文将介绍两种使用姿势 常规的使用方法 借助Iterator的使用姿势 1. 数据查询模拟 首先mock一个分页获取数据的逻辑,直接随机生成数据,并且控制最多返回三页 public static int cnt = 0; private static List

  • java中两个字符串的拼接、整数相加和浮点数相加实现代码

    编写一个Java应用程序,从键盘读取用户输入两个字符串,并重载3个函数分别实现这两个字符串的拼接.整数相加和浮点数相加,并输出结果.要进行异常处理,对输入的不符合要求的字符串提示给用户 package zyy.wxt.demo; import java.util.Scanner; public class overload { public static void main(String[] args) { String s1 = null, s2 = null; Scanner sc = ne

  • python开发中两个list之间传值示例

    由于改代码因为这个问题卡了半个小时特此记录 首先对于一个单层的列表 赋值如下,可以看见,如果直接使用 = 的话.其中一个变换便会引起另外一个变换,这时因为这两个list被python解释的时候使用的相同的地址,如下面输出的 id()中的内容,所以此时如果想让一个列表接收到另外一个列表的值,并且在接收到值后不会因为其中任意一个值的改变而改变,这时候就需要使用copy方法,这里可以解释成,当使用了copy方法后,python单独创建了找个一个内存区的地址放了新的那个值. a = [ 1,2,3] b

  • java中VO和DTO之间的转换实现

    目录 一.背景 二.详细讲解 注意 三.实体对象间的转换 四.第一种方法的具体代码例子 五.第二种方法的具体代码例子(使用dozer) 六.结束 一.背景 1.领域模型中的实体类分为四种类型:VO.DTO.DO.PO 二.详细讲解 1.VO(View Object),视图对象,用于展示层,它的作用是把某个指定页面(或组件)的所有数据封装起来. 2.DTO(Data Transfer Object),数据传输对象,这个概念来源于J2EE的设计模式,原来的目的是为了EJB的分布式应用提供粗粒度的数据

  • 基于java中两个对象属性的比较

    两个对象进行比较相等,有两种做法: 1.情况一:当仅仅只是判断两个对象是否相等时,只需重写equals()方法即可.这里就不用说明 2.情况二:当除了情况一之外,还需知道是那个属性不同,那么就需要采用类反射, 具体代码如下: public static void main(String[] args) { A a = new A(); a.setUserName("a"); a.setPassword("p"); a.setQq("q"); a.

  • Python实现在matplotlib中两个坐标轴之间画一条直线光标的方法

    本文实例讲述了Python实现在matplotlib中两个坐标轴之间画一条直线光标的方法.分享给大家供大家参考.具体如下: 看看下面的例子和效果吧 # -*- coding: utf-8 -*- from matplotlib.widgets import MultiCursor from pylab import figure, show, np t = np.arange(0.0, 2.0, 0.01) s1 = np.sin(2*np.pi*t) s2 = np.sin(4*np.pi*t

随机推荐