用堆栈实现长整数相加
来源:互联网 发布:linux mail服务器 编辑:程序博客网 时间:2024/06/06 08:31
package com.michael.j2se;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Stack;
public class BigIntegerAdd {
public static void main(String[] args) throws Exception {
System.out.println("请输入第一个大数字");
String s1 = input();
System.out.println("请输入第二个大数字");
String s2 = input();
add(s1, s2);
}
private static void add(String s1, String s2) {
Stack<Integer> st1 = new Stack<Integer>();
Stack<Integer> st2 = new Stack<Integer>();
Stack<Integer> result = new Stack<Integer>();
int templen = 0;
String strvalue = "";
// 调整长度相同
if (s1.length() >= s2.length()) {
templen = s1.length() - s2.length();
s2 = maxlen(s2, templen); // 208,2
} else {
templen = s2.length() - s1.length();
s1 = maxlen(s1, templen);
}
try {
for (int i = 0; i < s1.length(); i++) {
st1.push(Integer.parseInt(String.valueOf(s1.charAt(i))));
st2.push(Integer.parseInt(String.valueOf(s2.charAt(i))));
// st1.push(s1.charAt(i) - '0');
// st2.push(s2.charAt(i) - '0');
int m = st1.pop() + st2.pop();
result.push(m);
}
} catch (NumberFormatException e) {
e.printStackTrace();
}
int temp = 0;
while (!result.empty()) {
int t = result.pop();
if (t >= 10) {
strvalue = String.valueOf(t + temp - 10) + strvalue;
temp = t / 10;
} else {
strvalue = String.valueOf(t + temp) + strvalue;
temp = 0;
}
}
// 考虑最后一位进位
if (temp != 0) {
StringBuffer sb = new StringBuffer();
sb.append(strvalue);
strvalue = sb.insert(0, temp).toString();
}
display(strvalue);
}
/**
* 接受输入
*
* @return
*/
private static String input() {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String s = "";
//这里可以用正则表达式验证输入的是否都为数字
try {
s = br.readLine();
} catch (Exception e) {
e.getMessage();
}
return s;
}
/**
* 输出结果
*
* @param result
*/
private static void display(String str) {
System.out.print(str);
}
/**
* 添0实现字符串长度一样
* @param str
* @param templen
* @return
*/
private static String maxlen(String str, int templen) {
String strmax = null;
StringBuffer buff = new StringBuffer();
for (int i = 0; i < templen; i++) {
buff.append("0");
}
strmax = buff.toString() + str;
return strmax;
}
}
- 用堆栈实现长整数相加
- 任意长整数相加源代码
- 两任意长整数相加
- 长整数每位相加 算法
- 两任意长整数相加
- 用位运算实现两整数相加
- 两个超级长的整数相加减
- 输入两个长整数相加算法
- 简单LinuxC程序关于任意长整数相加(字符串实现)
- Java实现大整数相加
- java实现大整数相加
- Java实现大整数相加
- 位运算实现整数相加
- 大整数相加--c++实现
- 用汇编实现任意长度的两个整数相加
- 用栈实现大整数的相加与相减
- 长整形个位数相加(Java实现)
- java 实现 不限长整形字符串 相加
- java中的小数点转百分比的问题
- 建立邮件列表的九种主要资源
- [A1.ASP-NET]Gridview控件高效异步更新与实验(翻译)
- 得到webpanel的ID
- C#入门经典 第26章 源码 3.版本2
- 用堆栈实现长整数相加
- js无弹出框关闭浏览器窗口
- Request.ServerVariables("http_Referer")取不到值问题.
- CSDN网友挑选的2007年最有价值文章
- 在C#中改变系统时间 && 得到系统时间改变通知
- 即时信息(IM)在网络营销中的作用
- 博客作为网络营销工具的特点
- 将程序最小化成图标
- 又忙了一天