博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
超级计算器——两个大数相乘
阅读量:6581 次
发布时间:2019-06-24

本文共 1971 字,大约阅读时间需要 6 分钟。

/** * 超级计算器——两个大数相乘 *  * @author GaoHuanjie */public class SuperCalculator {	public static void main(String[] args) {		String multiplier1 = "12";		String multiplier2 = "70";		//		String multiplier1 = "13286754398172596";//		String multiplier2 = "2397567453241147";		System.out.println(multiplier1+"x" + multiplier2+"="+product(multiplier1, multiplier2));	} 	/**	 * 字符串顺序取反	 */	private static String reverse(String str) {		return new StringBuffer(str).reverse().toString();	}	/**	 * 将char类型的数据转int类型	 */	private static int covertInt(char str){		return Integer.parseInt(String.valueOf(str));	}	public static String product(String multiplier1, String multiplier2) {//以12x70为例		char[] multiplierArray1 = reverse(multiplier1).toCharArray();// 高低位对调 {2,1}		char[] multiplierArray2 = reverse(multiplier2).toCharArray();// 高低位对调 {0,7}		int multiplierLength1 = multiplierArray1.length;// 2		int multiplierLength2 = multiplierArray2.length;// 2		int productSize = multiplierLength1 + multiplierLength2;//两个数的乘积的最大长度  4		int[] productArray = new int[productSize];//乘积数组 {0,0,0,0}		for (int j = 0; j < multiplierLength2; j++) {// 对齐逐位相乘  {0,7}			for (int i = 0; i < multiplierLength1; i++) {// {2,1}				productArray[i + j] = productArray[i + j] + (covertInt(multiplierArray1[i])* covertInt(multiplierArray2[j]));			}		}		//到此productArray元素为{0,14,7,0}				for (int i = 0; i < productSize; i++) {// 进位处理													//i=0 i=1  i=2 i=3 			int quotient = productArray[i] / 10;//商   0   1    0   0			productArray[i] = productArray[i] % 10;//  0   4    8   0			if (quotient > 0) {				productArray[i + 1] = productArray[i + 1] + quotient;			}		}		//到此productArray元素为 {0,4,8,0}				int m = 0;		for (m = productSize - 1; m >= 0;) {// 找到最高位			if (productArray[m] > 0) {				break;			}			m--;		}		//至此m的值为 2		StringBuffer stringBuffer = new StringBuffer();		for (int n = 0; n <= m; n++) {// 由最高位開始打印乘积			stringBuffer.append(productArray[m - n]);		}		// 至此乘积为840		return stringBuffer.toString();	}}

转载地址:http://conno.baihongyu.com/

你可能感兴趣的文章
Linux学习之CentOS(十七)--与Linux文件和目录管理相关的一些重要命令①
查看>>
The Perfect Stall(二分图匹配,最大流EK算法)
查看>>
字符串处理
查看>>
know you with a highschool
查看>>
类对象VB.NET面向对象设计
查看>>
MS SQL 模仿ORACLE的DESC
查看>>
对淘宝一些规则的一些研究分享
查看>>
WAV格式
查看>>
信号量(一)
查看>>
开发前奏曲之添加Android SDK平台工具
查看>>
poj 2263&& zoj1952 floyd
查看>>
Django跨站伪造请求保护措施设置方法[转]
查看>>
关掉firefox(火狐)和palemoon地址栏自动加www.前缀功能【转】
查看>>
hdu 4300 Clairewd’s message(KMP)
查看>>
burp suite 使用教程详解(外文翻译转)
查看>>
Python循环
查看>>
Flume研究心得
查看>>
概要文件的创建
查看>>
虚拟域名设置步骤
查看>>
Oracle的substr函数简单用法
查看>>