Java语言实现大数字乘除

来源:互联网 发布:环保产业发展现状数据 编辑:程序博客网 时间:2024/06/04 20:14

看了最强大脑的速算,自己也想编个程序进行大数据的乘除。正好用最强大脑的题目进行验证。思路很简单,都是纯模拟。乘法很快就实现了,除法调bug调了好久。现在把代码贴出来看一下,以后经验多了再回来修改

乘法:

public StringBuffer time(StringBuffer a,StringBuffer b){int length_a=a.length();int length_b=b.length();int i;int j;a.reverse();b.reverse();Vector<StringBuffer> buffers=new Vector<>();StringBuffer final_result=new StringBuffer();for(i=0;i<length_b;i++){StringBuffer temp=new StringBuffer();int jinwei=0;for(j=i;j>0;j--){temp.append("0");}for(j=0;j<length_a;j++){int temp_result=Integer.parseInt(a.charAt(j)+"")*Integer.parseInt(b.charAt(i)+"")+jinwei;temp.append(temp_result%10+"");jinwei=temp_result/10;}if(jinwei>0) temp.append(jinwei);buffers.add(temp);}boolean has_add=false;int length=0;int jinwei=0;while(true){has_add=false;int temp_result=0;for(i=0;i<buffers.size();i++){if(buffers.get(i).length()>length){temp_result+=Integer.parseInt(buffers.get(i).charAt(length)+"");has_add=true;}}if(!has_add) break;temp_result+=jinwei; final_result.append(temp_result%10);jinwei=temp_result/10;length++;}if(jinwei>0) final_result.append(jinwei);return final_result.reverse();}

除法(非常乱的代码,自己都不好意思写了)
public class Divide {public static void main(String[] args) {StringBuffer a = new StringBuffer("11484484010043");StringBuffer b = new StringBuffer("5636587");Divide divide = new Divide();System.out.println("result= " + divide.divide(a, b));}public StringBuffer divide(StringBuffer a, StringBuffer b) {StringBuffer final_result = new StringBuffer();StringBuffer beijianshu = new StringBuffer();Vector<StringBuffer> numbers = timeANumber(b);int startPosition;int i, j;if (b.toString().compareTo(a.toString().substring(0, b.length())) > 0) {// 除数大(前几位)startPosition = b.length();beijianshu.append(a.toString().substring(0, b.length() + 1));} else {// 被除数大(前几位)startPosition = b.length() - 1;beijianshu.append(a.toString().substring(0, b.length()));}boolean equal = false;for (i = startPosition; i < a.length(); i++) {equal = false;// 求商// 商0if (b.length() > beijianshu.length()|| b.length() == beijianshu.length() && b.toString().compareTo(beijianshu.toString()) > 0) {final_result.append('0');equal = true;if (i < a.length() - 1)beijianshu.append(a.charAt(i + 1));continue;}// 若不为0for (j = 0; j < 9; j++) {if (numbers.get(j).length() == beijianshu.length()&& beijianshu.toString().equals(numbers.get(j).toString())) {final_result.append((j + 1) + "");equal = true;beijianshu.delete(0, beijianshu.length());break;}equal = false;if (numbers.get(j).length() == beijianshu.length()&& beijianshu.toString().compareTo(numbers.get(j).toString()) < 0) {final_result.append((j) + "");break;}if (numbers.get(j).length() > beijianshu.length()) {final_result.append((j) + "");break;}}if (numbers.get(8).length() < beijianshu.length() || numbers.get(8).length() == beijianshu.length()&& numbers.get(8).toString().compareTo(beijianshu.toString()) < 0) {final_result.append('9');}// 减if (j > 0 && equal == false) {StringBuffer temp_beijianshu = new StringBuffer(beijianshu.toString());StringBuffer temp_jianshu = new StringBuffer(numbers.get(j - 1).toString());beijianshu.delete(0, beijianshu.length());temp_beijianshu.reverse();temp_jianshu.reverse();while (temp_beijianshu.length() != temp_jianshu.length())temp_jianshu.append('0');for (j = 0; j < temp_jianshu.length(); j++) {if (temp_beijianshu.charAt(j) < temp_jianshu.charAt(j)) {beijianshu.append(10 + Integer.parseInt(temp_beijianshu.charAt(j) + "")- Integer.parseInt(temp_jianshu.charAt(j) + ""));int k;for (k = j + 1; k < temp_beijianshu.length(); k++) {if (temp_beijianshu.charAt(k) != '0') {temp_beijianshu.setCharAt(k, (char) (temp_beijianshu.charAt(k) - 1));break;} else {temp_beijianshu.setCharAt(k, '9');}}} else {beijianshu.append((Integer.parseInt(temp_beijianshu.charAt(j) + "")- Integer.parseInt(temp_jianshu.charAt(j) + "")));}}beijianshu.reverse();}int k;for (k = 0; k < beijianshu.length(); k++) {if (beijianshu.charAt(k) != '0')break;}beijianshu.delete(0, k);// 上数if (i < a.length() - 1)beijianshu.append(a.charAt(i + 1));}return final_result;}public Vector<StringBuffer> timeANumber(StringBuffer a) {Vector<StringBuffer> final_result = new Vector<StringBuffer>();StringBuffer chengshu = new StringBuffer(a.toString());int i, j;chengshu.reverse();for (i = 1; i <= 9; i++) {StringBuffer temp_result = new StringBuffer();int jinwei = 0;for (j = 0; j < chengshu.length(); j++) {int result = i * Integer.parseInt(chengshu.charAt(j) + "") + jinwei;temp_result.append(result % 10);jinwei = result / 10;}if (jinwei != 0)temp_result.append(jinwei);final_result.add(temp_result.reverse());}return final_result;}}

1 0