java实现正数的大数加法与大数比较(不使用第三方库)的代码
/**
* 大数加法与大数比较
*@author GMJ
*@date 2020-3-16
*/
public class BigNumberAdd {
/**
* 大数比较:
* S1大于S2返回 1;
* S1小于S2返回 0;
* S1等于S2返回-1;
* @date:2020-3-17
* @author GMJ
*/
public static int compareBigNum(String S1,String S2)
{
int s1l=S1.length();
int s2l=S2.length();
if(s1l>s2l)
{
return 1;
}
else if(s1l<s2l)
{
return 0;
}
//S1,S2长度相等的情况
else {
int i=0;
while(i<s1l)
{
if(S1.charAt(i)>S2.charAt(i))
{
return 1;
}
else if(S1.charAt(i)<S2.charAt(i))
{
return 0;
}
else {
i++;
}
}
return -1;//相等的情况
}
}
// public final static int M=50;
/**
*得到运算合适的长度
* @return a|b;
*/
public static int getMax(int a,int b)
{
if(a>=b)
{
return a;
}
else return b;
}
/**
* 大数加法
* S1+S2
* @param s1
* @param s2
* @return result;
*/
public static String add(String s1,String s2)
{
//将两个数转化为数组
String result="";
int carry=0;//进位
int M=getMax(s1.length(),s2.length());
int s1l=s1.length();
int s2l=s2.length();
int A[]=new int[M+1];
for(int i=0,j=s1l-1;i<M+1&&j>=0;i++,j--)
{
A[M-i]=s1.charAt(j)-'0';
}
int B[]=new int[M+1];
for(int i=0,j=s2l-1;i<M+1&&j>=0;i++,j--)
{
B[M-i]=s2.charAt(j)-'0';
}
int R[]=new int[M+1];
for(int j=M;j>=0;j--)
{
R[j]=((A[j]+B[j]+carry)%10);
carry=(((A[j]+B[j]+carry)/10));
}
if(R[0]!=0)
{
for(int i=0;i<M+1;i++)
{
result+=R[i];
}
}
else {
for(int i=1;i<M+1;i++)
{
result+=R[i];
}
}
return result;
}
/**
* 大数运算测试
* @param args
*/
public static void main(String[] args)
{
/*
* 大数:不在编程语言数据类型所表示的范围内
*
* s=s1+s2;s1与s2为大数
*/
// BigNumberAdd bigNumAdd = new BigNumberAdd();
// String res1 = bigNumAdd.add("1","2");
// BigInteger bigInteger = new BigInteger("1");
// BigInteger bigInteger1 = new BigInteger("2");
// System.out.println(res1);
// System.out.println(bigInteger.add(bigInteger1));
// System.out.println(res1.equals( (bigInteger.add(bigInteger1)).toString()));
// int c=BigNumberAdd.compareBigNum("1", "0");
// System.out.println(c);
// c=BigNumberAdd.compareBigNum("1", "1");
// System.out.println(c);
// c=BigNumberAdd.compareBigNum("0", "1");
// System.out.println(c);
// c=BigNumberAdd.compareBigNum("1111111111111111111111111111", "1111111111111111111111111110");
// System.out.println(c);
// c=BigNumberAdd.compareBigNum("1111111111111111111111111110", "1111111111111111111111111111");
// System.out.println(c);
// c=BigNumberAdd.compareBigNum("1111111111111111111111111111", "1111111111111111111111111111");
// System.out.println(c);
// c=BigNumberAdd.compareBigNum("76776173323213142112", "2323212");
// System.out.println(c);
// c=BigNumberAdd.compareBigNum("22454", "1531451454543543545");
// System.out.println(c);
// c=BigNumberAdd.compareBigNum("2345678910", "2345678910");
// System.out.println(c);
}
}