「大整数加法java」大整数加法运算

博主:adminadmin 2022-12-13 01:33:06 69

今天给各位分享大整数加法java的知识,其中也会对大整数加法运算进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

java数组实现超大整数的加法

注意最高位是0 !!!!!!!!!!!!

它是倒着存的,最后一位对应的是才是个位数。

JAVA超大整数的加法如何改成减法

你这个道题很有意思,应该是怎么使用算法吧:

减法从各位开始计算,需要判断减数和被减数的大小:

A. 当减数 = 被减数,标记后一位不用退位

B. 当减数     被减数,标记后一位需要退位

代码如下:

public class HandleLargeNumber {

public static void main(String[] args) {

int a[] = { 0, 9, 9, 7, 9, 4, 5, 6, 7, 2, 3, 4, 5, 6, 4, 7, 8, 9, 8, 7, 6, 9 };

int b[] = { 0, 0, 5, 9, 1, 6, 4, 5, 6, 2, 3, 4, 5, 7, 2, 1, 3, 4, 0, 3, 2, 9 };

jianFa(a,b);

// 下面是验证:通过BigInteger来做

BigInteger a1 = new BigInteger("997945672345647898769");

BigInteger a2 = new BigInteger("59164562345721340329");

System.out.println(a1.subtract(a2));

}

public static void jianFa(int[] a, int[] b) {

int idx1 = getStart(a);

print(a, idx1);

int idx2 = getStart(b);

print(b, idx2);

boolean isTui = false; // 是否退位标记

int c[] = new int[a.length];

for (int i = a.length; i  idx1; i--) {

if (!isTui) {

// 不退位

int aNum = a[i - 1];

int bNum = b[i - 1];

if (aNum = bNum) {

c[i - 1] = aNum - bNum;

isTui = false;

} else {

c[i - 1] = 10 + aNum - bNum;

isTui = true;

}

} else {

// 退位

int aNum = a[i - 1] - 1;

int bNum = b[i - 1];

if (aNum = bNum) {

c[i - 1] = aNum - bNum;

isTui = false;

} else {

c[i - 1] = 10 + aNum - bNum;

isTui = true;

}

}

}

System.out.printf("\n等于:\n");

print(c, getStart(c));

}

private static int getStart(int[] arr){

for (int i = 0; i  arr.length; i++) {

if (arr[i] != 0) {

return i;

}

}

return 0;

}

private static void print(int[] arr, int start){

for (int i = start; i  arr.length; i++) {

System.out.printf("%d", arr[i]);

}

System.out.print("\n");

}

}

上面的例子只适用用减数大于被减数,当减数小于被减数时,需要额外的计算,不过思路差不多,复杂度大了很多,呵呵。

亲,如果回答满意,请及时采纳,谢谢!!!

用Java编写 任意长的整数加法

这个程序也许能满足你的要求:

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

public class BigInteger//定义长整型的类

{

private static final int add1Max=1000;//可计算最长位数

private static final int add2Max=1000;//同上

private char[] add1 = new char[add1Max];

private char[] add2 = new char[add1Max];

private int len1;

private int len2;

public void setAdd1() throws IOException

{

int i=0;

String sLine1;

System.out.print("请输入第一个长整数: ");//输入第一个长整数

BufferedReader in = new BufferedReader(new InputStreamReader(System.in));

sLine1=in.readLine();

for(;isLine1.length();i++)

add1[i]=sLine1.charAt(i);

for(i=0;iadd1Max;i++)//len1=add1.length()

{

if(add1[i]!='\0')

len1++;

}

}

public void setAdd2() throws IOException

{

int i=0;

String sLine2;

System.out.print("请输入第二个长整数 : ");//输入第二个长整数

BufferedReader in2 = new BufferedReader(new InputStreamReader(System.in));

sLine2 = in2.readLine();

for(i=0;isLine2.length();i++)

add2[i]=sLine2.charAt(i);

for(i=0;iadd2Max;i++)//len2=add2.length()

{

if(add2[i]!='\0')

len2++;

}

}

public char[] getAdd1()

{

return add1;

}

public char[] getAdd2()

{

return add2;

}

public int getLen1()

{

return len1;

}

public int getLen2()

{

return len2;

}

public void add(char[] add1,char[] add2)//BigInteger相加方法

{

int len = Math.max(len1,len2);

int i;

char[] temp1 = new char[len];

char[] temp2 = new char[len];

char[] result = new char[len+1];

for(i=0;ilen1;i++)

temp1[len-1-i]=add1[len1-1-i];

for(i=0;ilen2;i++)

temp2[len-1-i]=add2[len2-1-i];

int m=0;

for(i=0;ilen;i++)//相加

{

if(temp1[len-1-i]!=0)

temp1[len-1-i]-=48;

if(temp2[len-1-i]!=0)

temp2[len-1-i]-=48;

m=temp1[len-1-i]+temp2[len-1-i];

if(m=10)

{

m-=10;

result[len-i]+=m;

result[len-1-i]+=1;

}

else result[len-i]+=m;

}

System.out.print("相加的和为:");//输出相加结果

i=0;

if(result[0]==0)

i=1;

for(;ilen+1;i++)

System.out.print(Integer.toString(result[i]));

}

public static void main(String[] args) throws IOException//主方法

{

BigInteger big = new BigInteger();//生成一个BigInteger对象

big.setAdd1();//得到数1

big.setAdd2();//得到数2

char[] num1 = big.getAdd1();//相加

char[] num2 = big.getAdd2();//相减

int len1 = big.getLen1();

int len2 = big.getLen2();

System.out.println();

System.out.println("第一个长整数的长度是: " + len1);

System.out.println("第二个长整数的长度是: " + len2);

big.add(num1,num2);

System.out.println();

}

}

运行结果如下:

请输入第一个长整数: 222222222222222222222222222222222222222222555555555555555555555555

请输入第二个长整数 : 88888888888888888888888888888888888888899999999999999999999999999

第一个长整数的长度是: 66

第二个长整数的长度是: 65

相加的和为:311111111111111111111111111111111111111122555555555555555555555554

JAVA编程中“两个大整数求和”怎么编写

将大整数存入字符数组,按位相加。 给你写一段伪代码。

String a = "12389839843958394";

String b = "23445655234343";

char ac [] = a.toCharArray();

char bc [] = b.toCharArray();

这里要将数组ac 和bc 倒序排列,因为"123"转换后为{'1','2','3'} 高位在前,倒序是为了低位在前。这部分代码自己实现把。

char longc[];

char shortc[];

if (ac.length=bc.length) {

longc=ac;

shortc=bc;

} else {

longc=bc;

shortc=ac;

}

下面做一个for循环,按位相加乘以10的i次方。就像小学学的列竖式子一样

int sum=0;

for (int i=longc.length;ilongc.length;i++) {

if (ishortc.length) {

sum+=(longc[i]+shortc[i]-96)*Math.pow(10, i);

} else {

sum+=(longc[i]-48)*Math.pow(10, i);

}

}

其中字符相加的时候减48是将char 转换成int

大整数加法java的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于大整数加法运算、大整数加法java的信息别忘了在本站进行查找喔。

The End

发布于:2022-12-13,除非注明,否则均为首码项目网原创文章,转载请注明出处。