43 Multiply Strings
2015-09-05 16:31
369 查看
/* * 用两个String模拟乘法,来完成大数相乘 */ public class Solution { public String multiply(String num1, String num2) { StringBuffer res = new StringBuffer(); if(num1==null||num1.length()==0) return res.toString(); if(num2==null||num2.length()==0) return res.toString(); int tlen1 = num1.length(); int tlen2 = num2.length(); if(num1.charAt(0)=='-'){ --tlen1; } if(num2.charAt(0)=='-'){ --tlen2; } if(tlen1 > tlen2){ String tmp = num1; num1 = num2; num2 = tmp; } int flag = 1; int f1 = 0, f2 = 0; if(num1.charAt(0)=='-'){ flag = -flag; f1 = 1; } if(num2.charAt(0)=='-'){ flag = -flag; f2 = 1; } int flen1 = num1.length() - 1; int flen2 = num2.length() - 1; int p = 0; for(int i=flen1;i>=f1;--i){ StringBuffer tmp = new StringBuffer(); int f = 0; int m = (int)(num1.charAt(i) - '0'); for(int j=flen2;j>=f2;--j){ int t1 = (int)(num2.charAt(j) - '0'); int t2 = m*t1 + f; int t3 = t2%10; f = t2/10; tmp.append(t3); } if(f!=0){ tmp.append(f); } int u1 = p, u2 = 0; int v = 0; while(u1<res.length()&&u2<tmp.length()){ int tv1 = (int)(res.charAt(u1) - '0'); int tv2 = (int)(tmp.charAt(u2) - '0'); int tv3 = tv1 + tv2 + v; int tv4 = tv3%10; char tvc = (char)(tv4 + '0'); v = tv3/10; res.setCharAt(u1, tvc); ++u1; ++u2; } if(u1<res.length()){ while(u1<res.length()){ int tv1 = (int)(res.charAt(u1) - '0'); int tv3 = tv1 + v; int tv4 = tv3%10; char tvc = (char)(tv4 + '0'); v = tv3/10; res.setCharAt(u1, tvc); ++u1; } if(v!=0){ res.append(v); } }else if(u2 < tmp.length()){ while(u2 < tmp.length()){ int tv2 = (int)(tmp.charAt(u2) - '0'); int tv3 = tv2 + v; int tv4 = tv3%10; char tvc = (char)(tv4 + '0'); v = tv3/10; res.append(tvc); ++u2; } if(v!=0){ res.append(v); } }else if(v!=0){ res.append(v); } ++p; } int index = res.length() - 1; boolean isZero = false; while(index>=0&&res.charAt(index)=='0'){ --index; } if(index<0){ return "0"; } res = new StringBuffer(res.substring(0, index + 1)); if(flag < 0){ res.append('-'); } res.reverse(); return res.toString(); } }
相关文章推荐
- 批量(文件名)HTML文件转化成jsp文件
- 全排列与组合问题
- leetcode 274: H-Index
- 动态代理模式原理-资源
- 并行算法的基本原理
- 编译与汇编
- 博客园API
- mouseover事件mouseenter事件
- TCP/IP(2)链路层
- android mvp
- 虚拟机上网
- houdini dop中调用sop体积场的几种方法
- 傻瓜式用Eclipse连接MySQL数据库
- 条款21:必须返回对象时,别妄想返回其引用
- UC/OS II中断管理
- selenium下各浏览器的driver配置
- eWebeditor编辑器上传图片的设置程序
- solr5.3.0快速入门
- POJ 3984迷宫问题(记录路径)
- nginx+lua+redis实现验证码防采集 - yanggd1987的专栏 - 博客频道 - CSDN.NET