关于两个任意长度的数字相乘的代码设计(不使用BigDecimal的情况下)
来源:互联网 发布:日本社交软件 编辑:程序博客网 时间:2024/05/22 17:37
package bigNumOfMulti;import java.util.ArrayList;import java.util.HashMap;import java.util.Iterator;import java.util.List;import java.util.Map;public class MultiBigNum {public static void main(String[] args) throws Exception {MultiBigNum multiBigNum = new MultiBigNum();String aaa ="9643";String bbb= "324";Map<String, List<String>> map1 = multiBigNum.multiRequest(aaa,bbb);for (int i = 0; i < map1.size(); i++) {List<char[]> listResult = multiBigNum.dislocationAddition(map1.get("list"+i));int ccccccc =1;}}//1.获取每一轮 每次两两相乘的集合/*** 举例子*/public Map<String, List<String>> multiRequest(String numA,String numB) throws Exception{//固定乘数被乘数的位置,保证循环的次数最少if (numA.length()<numB.length()) {String c = numA;numA =numB;numB =c; }//根据numB的length来创建集合用于存储数据Map<String, List<String>> map = creatListbyNumB(numB);char [] arrayOfNumA =numA.toCharArray();char [] arrayOfNumB =numB.toCharArray();for (int i = arrayOfNumB.length-1 ; i >=0; i--) {for (int j = arrayOfNumA.length-1; j >=0; j--) {//(int)arrayOfNumA[j]) 强转不可行 错误!!!int a =Integer.parseInt(arrayOfNumA[j]+"");int b = Integer.parseInt(arrayOfNumB[i]+"");String requestOfTwoNum =a*b+"";if(requestOfTwoNum.length()<2){requestOfTwoNum ="0"+requestOfTwoNum;}map.get("list"+(arrayOfNumB.length-i-1)).add(requestOfTwoNum);}}return map;}//工具————根据numB的长度来创建list集合public Map<String,List<String>> creatListbyNumB(String numB) throws Exception{int length = numB.length();Map<String, List<String>> map = null;if (length >0) {map = new HashMap<String, List<String>>();for (int i = 0; i < length; i++) {map.put("list"+i, new ArrayList<String>());}}if (map ==null) {throw new Exception("很明显numB没值");}return map;}/*** 错位大法* 例如:* listReq :[12,16,24,36]* 0 0 0 1 2* 0 0 1 6 0* 0 2 4 0 0* 3 6 0 0 0* 3 8 5 7 2 *所以先处理集合为:[00012,00160,02400,36000]* * @return*/public List<char []> dislocationAddition(List<String> listReq){//1.获取集合的size然后减一,(实际为补0的个数)int addZeroNum = listReq.size()-1;//2.创建一个用于接收结果的listList<char []> result = new ArrayList<char []>();//3.遍历集合拿出元素做处理StringBuffer sb = new StringBuffer();for (int i = 0; i < listReq.size(); i++) {//然后将每个"0"放入数组当中List<String> baseList = new ArrayList<String>();for (int j = 0; j < addZeroNum; j++) {baseList.add("0"); //例如:[0,0,0]}//取出第i位元素String strIII = listReq.get(i);//将第i为元素插入[0,0,0]中,具体位置取决于i的值baseList.add(baseList.size()-i,strIII);//例如:[0,0,0,12]for (int j = 0; j < baseList.size(); j++) {sb.append(baseList.get(j));}char [] resChar = sb.toString().toCharArray();result.add(resChar);sb.setLength(0);//或者 sb.delete(0, sb.length());}return result;}public char[] bitByBitAddition(List<char[]> listReq){for (int i = 0; i < listReq.size(); i++) {char [] c = listReq.get(i);//每列之和int bitNum = 0 ;//进位值int addBit = 0 ;//存放结果的数组for (int j = 0; j < c.length; j++) {bitNum+=Integer.parseInt(c[j]+"")+addBit;if (bitNum > 9) {addBit = (bitNum-(bitNum%10))/10;bitNum = bitNum%10;}}}return null;}/*** 一个没用的方法,懒得删了* @param a* @param b* @return*/public int[] mutifyOfTwoNum(int a ,int b){int g = (a*b)%10;int s = (a*b)/10%10;int [] c = {g,s};return c;}}
阅读全文
0 0
- 关于两个任意长度的数字相乘的代码设计(不使用BigDecimal的情况下)
- 任意长度的两个正整数相乘
- 任意长度的两个字符串数列相乘的算法实现
- 英雄会-----任意长度的两个正整数相乘
- 两个任意长度的长整数相乘(C语言、双向链表方法)
- 两个任意长度的长整数相乘(华为oj,C++)
- 任意长度的两大数相乘
- 任意长度数字的加法
- 编程实现任意长度的两个正整数相加 代码实现
- 关于BigDecimal的使用
- 关于BigDecimal 的使用
- 任意长度的两个大数的乘法
- 任意长度的两个大数的乘法
- 任意长度的两个大数的乘法
- 任意长度的两个大数的乘法
- 不使用string而获取任意长度的字符串
- JS——交换两个变量(不使用第三个变量的情况下)
- 两个任意长度整数的加减乘除
- 数组名=&数组名
- 由主页界面引出的几个知识点(五)
- 大数据
- Java并发学习(一)
- 设计模式之抽象工厂模式
- 关于两个任意长度的数字相乘的代码设计(不使用BigDecimal的情况下)
- Python模拟登陆CSDN
- 顺序表——插入不重复元素
- 遥感图像波段运算:分段公式叶面积指数计算
- HTML表格
- Python学习:HTML表单
- Python中的多进程和多线程
- Zookeeper is not connected yet!
- java的发展和基础;java的基础数据类型介绍;