Java语言实现大数字乘除

看了最强大脑的速算,自己也想编个程序进行大数据的乘除。正好用最强大脑的题目进行验证。思路很简单,都是纯模拟。乘法很快就实现了,除法调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;
			// 求商
			// 商0
			if (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;
			}
			// 若不为0
			for (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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值