「大整数加法java」大整数加法运算
今天给各位分享大整数加法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的信息别忘了在本站进行查找喔。
发布于:2022-12-13,除非注明,否则均为
原创文章,转载请注明出处。