java 实现任意位数相加!
2010-03-29 18:14
471 查看
package com.ajax;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
/**
* @author xn14168
*
* TODO To change the template for this generated type comment go to
* Window - Preferences - Java - Code Style - Code Templates
*/
public class Test {
public static void main(String[] args) {
while(true) {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String a = null;
String b = null;
try {
System.out.println("Number1:");
a = br.readLine();
System.out.println("Number2:");
b = br.readLine();
Object[] result = add(a, b);
System.out.println("Result : ");
for(int i=0; i < result.length; i++) {
System.out.print(result[i]);
}
System.out.println();
System.out.println("Continue?(Y/N)");
String exit = br.readLine();
if("N".equalsIgnoreCase(exit)) {
break;
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
private static Object[] add(String a, String b) {
String m = a;
String n = b;
if(a.length()>b.length()) {
n = padZero(b, a.length()-b.length());
} else {
m = padZero(a, b.length()-a.length());
}
System.out.println(m);
System.out.println(n);
long[] x = getNumberArray(m);
long[] y = getNumberArray(n);
return doAdd(x,y);
}
private static long[] getNumberArray(String number) {
int time = getTime(number);
if(time == 1 ) {
return new long[]{Long.parseLong(number)};
}
long[] result = new long[time];
String temp = number;
for(int i=time-1; i >=0; i-- ) {
if(temp.length() <=18) {
result[i] = Long.parseLong(temp);
} else {
String subNum = temp.substring(temp.length()-18, temp.length());
result[i] = Long.parseLong(subNum);
temp = temp.substring(0, temp.length()-18);
}
}
return result;
}
private static String padZero(String a, int zeroNum) {
StringBuffer sb = new StringBuffer();
for(int i = 0; i<zeroNum; i++) {
sb.append("0");
}
return sb.append(a).toString();
}
private static int getTime(String number) {
int length = number.length();
int time = (int)Math.ceil(length/18f);
return time;
}
private static Object[] doAdd(long[] a, long[] b) {
Object[] result=new Object[a.length];
int jinwei = 0;
for(int i = b.length-1; i>=0; i--) {
// System.out.print(a[i] + " + " + b[i] + " + " + jinwei);
result[i] = new Long(a[i] + b[i] + jinwei);
long longValue = ((Long)result[i]).longValue();
if( longValue >= 1000000000000000000l) {
jinwei = 1;
String temp = String.valueOf(longValue - 1000000000000000000l);
int needPad = 18 - temp.length();
result[i] = new String(padZero(temp, needPad));
} else if(i!=0) {
String temp = String.valueOf(longValue);
int needPad = 18 - temp.length();
result[i] = new String(padZero(temp, needPad));
jinwei = 0;
}
// System.out.println("= " + result[i]);
}
// if(jinwei == 1) {
// long longValue = ((Long)result[0]).longValue();
// result[0] = new Long(longValue + 1l);
// }
return result;
}
}
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
/**
* @author xn14168
*
* TODO To change the template for this generated type comment go to
* Window - Preferences - Java - Code Style - Code Templates
*/
public class Test {
public static void main(String[] args) {
while(true) {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String a = null;
String b = null;
try {
System.out.println("Number1:");
a = br.readLine();
System.out.println("Number2:");
b = br.readLine();
Object[] result = add(a, b);
System.out.println("Result : ");
for(int i=0; i < result.length; i++) {
System.out.print(result[i]);
}
System.out.println();
System.out.println("Continue?(Y/N)");
String exit = br.readLine();
if("N".equalsIgnoreCase(exit)) {
break;
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
private static Object[] add(String a, String b) {
String m = a;
String n = b;
if(a.length()>b.length()) {
n = padZero(b, a.length()-b.length());
} else {
m = padZero(a, b.length()-a.length());
}
System.out.println(m);
System.out.println(n);
long[] x = getNumberArray(m);
long[] y = getNumberArray(n);
return doAdd(x,y);
}
private static long[] getNumberArray(String number) {
int time = getTime(number);
if(time == 1 ) {
return new long[]{Long.parseLong(number)};
}
long[] result = new long[time];
String temp = number;
for(int i=time-1; i >=0; i-- ) {
if(temp.length() <=18) {
result[i] = Long.parseLong(temp);
} else {
String subNum = temp.substring(temp.length()-18, temp.length());
result[i] = Long.parseLong(subNum);
temp = temp.substring(0, temp.length()-18);
}
}
return result;
}
private static String padZero(String a, int zeroNum) {
StringBuffer sb = new StringBuffer();
for(int i = 0; i<zeroNum; i++) {
sb.append("0");
}
return sb.append(a).toString();
}
private static int getTime(String number) {
int length = number.length();
int time = (int)Math.ceil(length/18f);
return time;
}
private static Object[] doAdd(long[] a, long[] b) {
Object[] result=new Object[a.length];
int jinwei = 0;
for(int i = b.length-1; i>=0; i--) {
// System.out.print(a[i] + " + " + b[i] + " + " + jinwei);
result[i] = new Long(a[i] + b[i] + jinwei);
long longValue = ((Long)result[i]).longValue();
if( longValue >= 1000000000000000000l) {
jinwei = 1;
String temp = String.valueOf(longValue - 1000000000000000000l);
int needPad = 18 - temp.length();
result[i] = new String(padZero(temp, needPad));
} else if(i!=0) {
String temp = String.valueOf(longValue);
int needPad = 18 - temp.length();
result[i] = new String(padZero(temp, needPad));
jinwei = 0;
}
// System.out.println("= " + result[i]);
}
// if(jinwei == 1) {
// long longValue = ((Long)result[0]).longValue();
// result[0] = new Long(longValue + 1l);
// }
return result;
}
}
相关文章推荐
- 汇编程序_实现任意两个五位数相加的
- java实现:将一个数各个位数相加
- Java 生成任意位数永不重复的随机数策略实现
- Java 生成任意位数永不重复的随机数策略实现
- JAVA函数实现任意给定一组数, 找出任意数相加等于某数或者在一个范围
- java实现:将一个数各个位数相加
- 长整形个位数相加(Java实现)
- java实现:将一个数各个位数相加
- Java不使用BigDecimal,实现两个大数相加
- python简易实现任意位数的水仙花
- 用Java Serialization实现任意文件网络传输
- 请用Java实现冒泡、插入、选择排序中的任意一个排序算法。
- java实现任意层数金字塔
- 取任意一个数字的个位数 Java
- 栈实现计算器四则运算+一个任意两个超大位数加法
- Java实现超大数字相加的算法
- MAPM代码:任意有效位数的除法实现解析
- 实现任意精读的除法(JAVA)
- 使用java的html解析器jsoup和jQuery实现一个自动重复抓取任意网站页面指定元素的web应用
- java实现两个大数相加