java实现正数的大数加法与大数比较(不使用第三方库)的代码

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);
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值