| 复制代码//首先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();                
        }
}
 |