A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 郭孟涛 高级黑马   /  2013-1-29 00:18  /  3183 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 张向辉 于 2013-2-2 11:09 编辑

两个大数相乘:char* multiply(char*,char*)。给了两个字符串,每个都是代表了一个很长的10进制表示的数, 比如 String str1 = "23456789009877666555544444"; String str2 = "346587436598437594375943875943875", 最后求出它们的乘积。 不用jdk的数学运算包BigInteger.或者类似的包。

2 个回复

倒序浏览
  1. //首先Char *是C++里的字符串表示方法,Java里我们用String
  2. //思路:模拟手工计算乘法的过程
  3. //先把两个数的字符串逆序 。为什么逆序?方便处理到高位的进位
  4. //然后计算。计算的中间结果存在一个整型数组里。
  5. //最后将整型数组转换成字符串返回
  6. //测试用例用Windows自带的计算器算了一下,证明代码的运行结果完全。
  7. //温馨提示:计算器的操作数和结果可以复制粘贴哦。
  8. //代码匆匆写就,欢迎高手前来优化。
  9. public class x
  10. {
  11.         static int N=100;
  12.         public static void main(String[] args)
  13.         {
  14.                 String str1 ="23456789009877666555544444";
  15.                 String str2 ="346587436598437594375943875943875";
  16.                 System.out.println(multiply(str1,str2));       
  17.         }
  18.         static String multiply(String s1,String s2)
  19.         {
  20.                 int i,j,tmp;
  21.                 String s=new StringBuffer(s1).reverse().toString();
  22.                 String t=new StringBuffer(s2).reverse().toString();
  23.                
  24.                 int []r=new int[N];
  25.                 for(i=0;i<s.length();i++)
  26.                         for(j=0;j<t.length();j++)
  27.                         {
  28.                                 tmp=(s.charAt(i)-'0')*(t.charAt(j)-'0');
  29.                                 r[i+j]+=tmp%10;
  30.                                 r[i+j+1]+=tmp/10;
  31.                         }
  32.                 for(i=0;i<N;i++)
  33.                 {
  34.                         tmp=r[i];
  35.                         if(tmp>9)
  36.                         {
  37.                                 r[i]=tmp%10;
  38.                                 r[i+1]+=tmp/10;
  39.                         }
  40.                 }
  41.                 StringBuffer sb=new StringBuffer();
  42.                 for(i=N-1;i>=0;i--)
  43.                         if(r[i]!=0)
  44.                                 break;
  45.                 for(j=i;j>=0;j--)
  46.                         sb.append(r[j]);
  47.                 return sb.toString();               
  48.         }
  49. }

复制代码

评分

参与人数 1技术分 +1 收起 理由
Rancho_Gump + 1

查看全部评分

回复 使用道具 举报
我运行一下,答案这么长:8129828373763903512004369615410968394975299532195012080500

向您学习了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马