- //首先Char *是C++里的字符串表示方法,Java里我们用String
- //思路:模拟手工计算乘法的过程
- //先把两个数的字符串逆序 。为什么逆序?方便处理到高位的进位
- //然后计算。计算的中间结果存在一个整型数组里。
- //最后将整型数组转换成字符串返回
- //测试用例用Windows自带的计算器算了一下,证明代码的运行结果完全。
- //温馨提示:计算器的操作数和结果可以复制粘贴哦。
- //代码匆匆写就,欢迎高手前来优化。
- public class x
- {
- static int N=100;
- public static void main(String[] args)
- {
- String str1 ="23456789009877666555544444";
- String str2 ="346587436598437594375943875943875";
- System.out.println(multiply(str1,str2));
- }
- static String multiply(String s1,String s2)
- {
- int i,j,tmp;
- String s=new StringBuffer(s1).reverse().toString();
- String t=new StringBuffer(s2).reverse().toString();
-
- int []r=new int[N];
- for(i=0;i<s.length();i++)
- for(j=0;j<t.length();j++)
- {
- tmp=(s.charAt(i)-'0')*(t.charAt(j)-'0');
- r[i+j]+=tmp%10;
- r[i+j+1]+=tmp/10;
- }
- for(i=0;i<N;i++)
- {
- tmp=r[i];
- if(tmp>9)
- {
- r[i]=tmp%10;
- r[i+1]+=tmp/10;
- }
- }
- StringBuffer sb=new StringBuffer();
- for(i=N-1;i>=0;i--)
- if(r[i]!=0)
- break;
- for(j=i;j>=0;j--)
- sb.append(r[j]);
- return sb.toString();
- }
- }
复制代码 |