学习记录321@BigInteger底层原理代码实现

package com.dream.test06;

public class MyBigInteger {
    
    
	
	private String str;

	public MyBigInteger() {
    
    
		super();
	}

	public MyBigInteger(String str) {
    
    
		super();
		this.str = str;
	}

	public String getStr() {
    
    
		return str;
	}

	public void setStr(String str) {
    
    
		this.str = str;
	}
	
	//加法
	//核心是先将字符串转化为char[]数组,然后对每个元素进行加法运算,注意可能有进位,数也会有长短之分
	public MyBigInteger add(MyBigInteger myBigInteger){
    
    
		//转化为char[]数组
		char[] charArray1 = this.str.toCharArray();
		char[] charArray2 = myBigInteger.str.toCharArray();
		//获取最大索引值
		int index1=charArray1.length-1;
		int index2=charArray2.length-1;
		//每位数
		int num1=0;
		int num2=0;
		//进位数
		int num3=0;
		//接收每位数算出来的值
		StringBuffer sb = new StringBuffer();
		while(index1>=0 ||index2>=0){
    
    
			
			if (index1>=0) {
    
    
				//转化为整数
				num1 = Integer.valueOf(Character.toString(charArray1[index1]));
			}else {
    
    
				//短的那个数短的那个部分要填充为0
				num1=0;
			}
			if (index2>=0) {
    
    
				num2 = Integer.valueOf(Character.toString(charArray1[index2]));
			}else {
    
    
				num2=0;
			}
			//计算结果
			int result=num1+num2+num3;
			//如果结果大于10,说明有进位
			if (result>=10) {
    
    
				num3=1;
				result%=10;
			} else {
    
    
				num3=0;
			}
			//装入StringBuffer
			sb.append(result);
			index1--;
			index2--;
		}
		//跳出循环后,最后一次计算如果进位了,还要append进去
		if (num3==1) {
    
    
			sb.append(num3);
		}
		//因为开始是从尾到头计算的,因此要翻转过来
		sb.reverse();
		//返回
		return new MyBigInteger(sb.toString());
	}
	
	@Override
	public String toString() {
    
    
		// TODO Auto-generated method stub
		return str;
	}
}

package com.dream.test06;

public class Test01 {
    
    

	public static void main(String[] args) {
    
    
		
		MyBigInteger myBigInteger1 = new MyBigInteger("123456789");
		MyBigInteger myBigInteger2 = new MyBigInteger("123456789");
		System.out.println(myBigInteger1.add(myBigInteger2));
		
	}
}

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_44663675/article/details/108985676