大数相加、大数相乘
来源:互联网 发布:中国移动网络id是多少 编辑:程序博客网 时间:2024/06/03 02:34
我们首先看大数相加,其基本思路是:
过程和我们直接笔算思路一样,比如 129 + 23 ,先计算 9+3 = 12 ,则确定个位为2,同时向前进 1 ;继续 2 + 2 + 1 = 5,确定十位为5,同时向前进 0;继续 1 + 0 + 0 = 1,确定百位为1(其中该式中前一个0为12补齐的0,后一个0为进位的0);结束 得到结果为152。代码如下:
package pack1;public class Multiply {/** * @param 大数相加 */public String add(String str1,String str2){int jinwei = 0;StringBuffer sb1 = new StringBuffer(str1); sb1.reverse();StringBuffer sb2 = new StringBuffer(str2); sb2.reverse();int len1=sb1.length(),len2=sb2.length(),minLen = (len1>len2)?len2:len1;StringBuffer sb = new StringBuffer("");for(int i=0;i<minLen;i++){int single =Integer.parseInt(sb1.charAt(i)+"")+Integer.parseInt(sb2.charAt(i)+"")+jinwei;sb.append(single%10);jinwei = single /10;}if(len1==len2){if(jinwei!=0) sb.append(jinwei);return sb.reverse().toString();}else if(len1>len2){for(int i=len2;i<len1;i++){int single =Integer.parseInt(sb1.charAt(i)+"")+jinwei;sb.append(single%10);jinwei = single /10;}if(jinwei!=0) sb.append(jinwei);return sb.reverse().toString();}else{for(int i=len1;i<len2;i++){int single =Integer.parseInt(sb2.charAt(i)+"")+jinwei;sb.append(single%10);jinwei = single /10;}if(jinwei!=0) sb.append(jinwei);return sb.reverse().toString();}} public static void main(String[] args) {Multiply mul = new Multiply();System.out.println(mul.add("8882488", "123888234248888"));//使用BigInteger java.math.BigInteger big1 = new java.math.BigInteger("8882488"); java.math.BigInteger big2 = new java.math.BigInteger("123888234248888"); System.out.println(big1.add(big2).toString());}}
大数相乘
大数相乘怎么做呢,比如计算129 * 23,算法思路为:将乘法变换为加法进行计算。首先取23的个位3,代表129需要相加3次;然后再取23的十位2,代表129需要相加2次,并且同时需要在乘以10,则可以得到最后的结果。代码如下:
package pack1;public class Multiply {/** * @param 大数相加 */public String add(String str1,String str2){int jinwei = 0;StringBuffer sb1 = new StringBuffer(str1); sb1.reverse();StringBuffer sb2 = new StringBuffer(str2); sb2.reverse();int len1=sb1.length(),len2=sb2.length(),minLen = (len1>len2)?len2:len1;StringBuffer sb = new StringBuffer("");for(int i=0;i<minLen;i++){int single =Integer.parseInt(sb1.charAt(i)+"")+Integer.parseInt(sb2.charAt(i)+"")+jinwei;sb.append(single%10);jinwei = single /10;}if(len1==len2){if(jinwei!=0) sb.append(jinwei);return sb.reverse().toString();}else if(len1>len2){for(int i=len2;i<len1;i++){int single =Integer.parseInt(sb1.charAt(i)+"")+jinwei;sb.append(single%10);jinwei = single /10;}if(jinwei!=0) sb.append(jinwei);return sb.reverse().toString();}else{for(int i=len1;i<len2;i++){int single =Integer.parseInt(sb2.charAt(i)+"")+jinwei;sb.append(single%10);jinwei = single /10;}if(jinwei!=0) sb.append(jinwei);return sb.reverse().toString();}} public String multiply(String str1,String str2){ int len1 = str1.length(); int len2 = str2.length(); String result = "0"; if(len1<len2){ //使得str2指向的字符串为较短的一个字符串 String temp = str1; str1 = str2; str2 = temp; len1 = str1.length(); len2 = str2.length(); } for(int i=1;i<=len2;i++){ String temp = "0"; int num = str2.charAt(len2-i) - '0'; for(int j=1;j<=num;j++) temp = add(temp,str1); for(int k=1;k<=i-1;k++) temp = temp + "0"; result = add(result,temp); } return result; }public static void main(String[] args) {Multiply mul = new Multiply();System.out.println(mul.multiply("8882488", "123888234248888"));//使用BigInteger java.math.BigInteger big1 = new java.math.BigInteger("8882488"); java.math.BigInteger big2 = new java.math.BigInteger("123888234248888"); System.out.println(big1.multiply(big2).toString());}}
- 大数相加, 大数相乘
- 大数相加、大数相乘
- 大数相乘,大数相加
- 大数相加 大数相乘 模板
- 大数相乘与大数相加
- 大数相加和大数相乘
- 大数相乘和大数相加
- 大数相加 大数相乘 C++
- 大数相加 相乘
- 大数相乘和相加
- 大数相加 和 相乘
- 大数相乘、相加
- 大数相加与相乘
- 大数相加,大数相乘和100!
- 大数相加、相乘 字符串处理
- 大数相加 相乘 java实现
- 大数相加相乘及阶乘
- 大数相加相减相乘
- 如何安装vtk入门篇
- 使用Flash地图控件AnyMap在地图中添加气泡图形
- Linux内核原子操作 原理
- 写给学单片机的年轻人
- android widget 开发实例 : 桌面便签程序的实现详解和源码 (上)
- 大数相加、大数相乘
- Online Learning(from Cousera Course of Stanford University)
- WordPress 源代码分析(2)--安装2
- [iOS]使用NSProxy实现消息转发机制,模拟多重继承
- Hive编程(影印版)
- java位移操作
- stm32编程配置一个I/O为EXTI中断的步骤
- android widget 开发实例 : 桌面便签程序的实现详解和源码 (下)
- 301跳转代码全集(ASP|PHP|JSP|.NET)