您的位置:

java超大整数相加,java大整数乘法

本文目录一览:

两个最大整数相加等于多少呢?

计算机计算相加其实是通过其补码来进行相加的,故只需按照这种规则相加即可

正数的 原码,反码,补码 是他本身

负数: 反码= 原码取反(符号位除外),补码= 反码+1

java int 32位

为了方便运算,用四位计算,结果是一样的

用 0111代表java int最大数(32位无非中间多几位1,计算结果是一样的)

0111[原码]

0111[反码]

0111[补码]

1. 步骤一转换为补码运算

0111[补码] + 0111[补码] = 1110[补码]---1010[原码] -----2(10)

2.将计算出的结果转回原码

1110[补码]---1010[原码] -----2(10进制)

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代码,要求输入两个数,实现超大数的相加和相减

package test;

public class DoubleTest {

    /**

     * @param args

     */

    public static void main(String[] args) {

        System.out.println(Long.MAX_VALUE);//最大数:9223372036854775807

        System.out.println(Long.MIN_VALUE);//最小数:-9223372036854775808

        System.out.println(Double.MAX_VALUE);//最大数:1.7976931348623157E308

        System.out.println(Double.MIN_VALUE);//最小数:4.9E-324

        Double a = 9223372036854775807d;

        Double b = 9223372036854775807d;

        Double c =a+b;

        System.out.println(c);

                              

    }

}

用Double型吧。最大了。

Java 2个(多个)大整数相加如何实

先自定义一个异常public class LowerException extends Exception{ int score ; public LowException(int score){ super("分数=0"); this.score = score; } }新建一个类TestException.java然后写这个抛异常方法:public void validate(int score) throws LowException { if (score = 0) { throw new LowException(score); } public int inputScore(int score1,int score2 ) { try { validate(score1); validate(score2); int sum = score1+score2; return sum; } catch (LowException e) { System.out.println("进入低分异常"); System.out.println("数太低了,输入的分数为" + e.score); e.printStackTrace(); } }public static void main(String[] args) { TestException te = new TestException(); double d1 = Double.parseDouble(args[0]);double d2 = Double.parseDouble(args[0]); System.out.println( te.inputScore(d1,d2)); }}你在编译完毕后。在命令行执行java TestException 参数1 参数2 。记住参数只可以输数字。不可以输别的否则出现不可预知的后果。

Java实现两个无限大的数的加减乘除运算

根据你的要求,我写了一下代码,如下:package com.fer2005.test;public class AddUtil { /**

* @param a1 大数字1,按数组存储

* @param a2 大数字2,按数组存储

* @return 返回结果数组

*/

public int[] getResult(int[] a1,int[] a2){

//取最大的长度作为返回结果的长度,此时未考虑是否有进位

int length=a1.lengtha2.length?a1.length:a2.length;

//新建未考虑进位的数组结果

int[] tmp_res =new int[length];

int i=0;

//循环相加得到res的按照最短数组相加的结果

while(ia1.lengthia2.length){

i++;

tmp_res[length-i]=a1[a1.length-i]+a2[a2.length-i];

}

//操作完成后,需将长数组的值赋给res

//a1的长度说明a1比a2长度小,res需要获取a2的前几位

if(a1.lengtha2.length){

while(length-i0){

tmp_res[length-i-1]=a2[a2.length-i-1];

i++;

}

}else if(a1.lengtha2.length){

//说明a2比a1长度小,res需要获取a1的前几位

while(length-i0){

tmp_res[length-i-1]=a1[a1.length-i-1];

i++;

}

} //考虑进位问题,如果某一元素大于10,则本身减10,前一元素加1,如果第一个元素大于10,特殊处理。

//需处理相加之和大于10的情况

for(int k=tmp_res.length-1;k0;k--){

if(tmp_res[k]=10){

tmp_res[k-1]=tmp_res[k-1]+1;

tmp_res[k]=tmp_res[k]-10;

}

}

int[] res=new int[length+1];

//首位情况特殊处理

if(tmp_res[0]=10){

res[0]=1;

res[1]=tmp_res[0]-10;

for(int m=1;mtmp_res.length;m++){

res[m+1]=tmp_res[m];

}else{ res=tmp_res; }

}

return res;

}

/**

* @param args

*/

public static void main(String[] args) {

// TODO Auto-generated method stub

AddUtil addUtil = new AddUtil();

int[] a1= {9,2,3,8,5};

int[] a2={1,9,2,3,9};

for(int j:addUtil.getResult(a1, a2)){

System.out.print(j+",");

}

}}

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

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

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