题目来源:杭电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();
}
}
}
}
吐血,差点离开这美好的人世间。自己还是不够细心。。。。。。