本文目录一览:
- 1、两个最大整数相加等于多少呢?
- 2、JAVA编程中“两个大整数求和”怎么编写
- 3、求JAVA代码,要求输入两个数,实现超大数的相加和相减
- 4、Java 2个(多个)大整数相加如何实
- 5、Java实现两个无限大的数的加减乘除运算
- 6、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 !!!!!!!!!!!!
它是倒着存的,最后一位对应的是才是个位数。