上机题目(中级)- 两个超级大的整数相加相减 (Java)

代码例如以下:

public class AddSub {
	public static void main(String[] args) {
		
		String a="4632864832684683568465765487657665765236465244";
		String b="47";
		int []pa=stringToInts(a);
		int []pb=stringToInts(b);
		String ans_add=add(pa, pb);
		String ans_sub=sub(pb,pa);
		System.out.println("相加结果是:"+ans_add);
		System.out.println("相减结果是:"+ans_sub);
	}
	/**
	 * 将String型转换成int数组
	 * @param s
	 * @return
	 */
	public static int[] stringToInts(String s){
		int[] n = new int[s.length()]; 
		for(int i = 0;i<s.length();i++){
		n[i] = Integer.parseInt(s.substring(i,i+1));
		}
		return n;
	}
	
	public static String add(int []a,int []b){
		StringBuffer sb=new StringBuffer();
		int a_len= a.length-1;
		int b_len=b.length-1;
		int jinwei=0;//进位
		while(a_len>=0||b_len>=0){
			int temp=0;
			if(a_len>=0&&b_len>=0){
				temp=a[a_len]+b[b_len]+jinwei;
			}else if(a_len>=0){
				temp=a[a_len]+jinwei;
			}else if(b_len>=0){
				temp=b[b_len]+jinwei;
			}
			sb.append(temp%10+"");
			jinwei=temp/10;
			a_len--;b_len--;
		}
		return getNum(sb.reverse());
	}
	
	public static String sub(int []a,int []b){
		StringBuffer sb=new StringBuffer();
		boolean flag=false;//推断a是不是比b小
		if(a.length<b.length){
			int c[]=a;
			a=b;b=c;//交换一下
			flag=true;
		}
		int a_len= a.length-1;
		int b_len=b.length-1;
		int jiewei=0;//借位
		while(a_len>=0||b_len>=0){
			int temp=0;
			if(a_len>=0&&b_len>=0){
				if((a[a_len]-jiewei)<b[b_len]){
					temp=a[a_len]+10-b[b_len]-jiewei;
					jiewei=1;
				}else{
					temp=a[a_len]-b[b_len]-jiewei;
				}
			}else if(a_len>=0){
				temp=a[a_len]-jiewei;
				jiewei=0;
			}
			sb.append(temp+"");
			
			a_len--;b_len--;
		}
		if(flag){
			return getNum(sb.append("-").reverse());
		}
		return getNum(sb.reverse());
	}
	//去掉最前面的0
	public static String getNum(StringBuffer sb){
		while(sb.length() > 1 && sb.charAt(0) == '0') {
            sb.deleteCharAt(0);
        }
		return sb.toString();
	}

}

执行实比例如以下:


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值