大数相加

题目来源:杭电oj1002题
http://acm.hdu.edu.cn/showproblem.php?pid=1002
1.java里面有个大数相加的方法,可以使用。

import java.util.Scanner;
import java.util.Stack;
import java.io.*;
import java.math.BigInteger;
public class Main {
	public static void main(String[] args) {
		Scanner reader = new Scanner(System.in);
		int num = reader.nextInt();
		for (int g = 1; g <= num; ++g) {
			String a = reader.next();
			String b = reader.next();
			BigInteger biga = new BigInteger(a);
			BigInteger bigb = new BigInteger(b);
			BigInteger result = biga.add(bigb);
			System.out.println("Case " + g + ":");
			System.out.println(a + " + " + b + " = " + result);
			if (g != num) {
				System.out.println();
			}
		}
	}
}

2.这个是利用栈来进行处理的

import java.util.Scanner;
import java.util.Stack;
import java.io.*;
public class Main {
	public static void main(String[] args) {
		Scanner reader=new Scanner(System.in);
		int num=reader.nextInt();//接收组数
		for(int g=1;g<=num;++g)
		{
		String a=reader.next();//接收第一个数
		String b=reader.next();
		Stack <Integer>stack_a=new <Integer>Stack();
		Stack <Integer>stack_b=new <Integer>Stack();
		char tmp;
		for(int i=0;i<a.length();++i)//入栈
		{
			tmp=a.charAt(i);
			stack_a.push((int)tmp-48);
		}
		for(int i=0;i<b.length();++i)
		{
			tmp=b.charAt(i);
			stack_b.push((int)tmp-48);
		}
		String result="";
		int t=0;
		while(!stack_a.isEmpty()&&!stack_b.isEmpty())//将两个栈中的数字弹出并相加,直至有一个为空
		{
			result+=(stack_a.peek()+stack_b.peek()+t)%10;
			t=(stack_a.pop()+stack_b.pop()+t)/10;
		}
		while(!stack_a.isEmpty()) {
			result+=(stack_a.peek()+t)%10;
			t=(stack_a.pop()+t)/10;
		}
		while(!stack_b.isEmpty()) {
			result+=(stack_b.peek()+t)%10;
			t=(stack_b.pop()+t)/10;
		}
		if(t!=0)//可能t里面还有数值,如果t非0,得加上
			result+=t;
		//翻转结果字符串,因为我们把数字压入栈中,取出来相加,得到的结果是结果的翻转字符串,所以需要在最后翻转一次。
		String reverse=new StringBuffer(result).reverse().toString();
		System.out.println("Case "+g+":");
		System.out.println(a+" + "+b+" = "+reverse);
		if(g!=num) 
		{
		System.out.println();
		}
	}
	}
}

在这里插入图片描述
吐血,差点离开这美好的人世间。自己还是不够细心。。。。。。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值