Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1436573
  • 博文数量: 241
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 2253
  • 用 户 组: 普通用户
  • 注册时间: 2012-04-11 22:27
个人简介

--

文章分类

全部博文(241)

文章存档

2021年(3)

2019年(6)

2018年(1)

2017年(9)

2016年(21)

2015年(50)

2014年(125)

2013年(26)

我的朋友

分类: C/C++

2014-03-06 21:54:30

题目:
两大整数相乘

代码:

点击(此处)折叠或打开

  1. #include "oj.h"
  2. /*****************************************************************************
  3.  Prototype : multiply
  4.  Description : 两个任意长度的长整数相乘, 输出结果
  5.  Input Param :
  6.                 const std::string strMultiplierA 乘数A
  7.                 const std::string strMultiplierB 乘数B
  8.  Output :
  9.                 std::string strRst 乘法结果
  10.  Return Value :
  11.                 int 0 正确
  12.                                          -1 异常
  13. *****************************************************************************/
  14. int multiply (const std::string strMultiplierA,const std::string strMultiplierB, std::string &strRst)
  15. {
  16.     /* 在这里实现功能 */
  17.     if (strMultiplierA.size()<=0 || strMultiplierB.size()<0)
  18.     {
  19.         return -1;
  20.     }
  21.     size_t start_A,start_B;

  22.     for(start_A = 0; start_A < strMultiplierA.size(); start_A ++)
  23.     {
  24.         if (strMultiplierA[start_A] != '0')
  25.         {
  26.             break;
  27.         }
  28.     }
  29.     for(start_B = 0; start_B < strMultiplierB.size(); start_B ++)
  30.     {
  31.         if (strMultiplierB[start_B] != '0')
  32.         {
  33.             break;
  34.         }
  35.     }
  36.     size_t size_A = strMultiplierA.size()-start_A;
  37.     size_t size_B = strMultiplierB.size()-start_B;
  38.     size_t end_Rst = size_A + size_B-1;
  39.     strRst.resize(end_Rst+1,'0');

  40.     size_t i,tmp,j,plus,index;
  41.     char forhead;
  42.     
  43.     for (i=strMultiplierB.size()-1; i>=start_B; i--)
  44.     {
  45.         index = end_Rst--;
  46.         if(strMultiplierB[i] != '0')
  47.         {
  48.             for (plus=0,j=strMultiplierA.size()-1; j>=start_A; j--)
  49.             {
  50.                 tmp = (strMultiplierB[i]-'0')*(strMultiplierA[j]-'0') + plus;
  51.                 forhead = strRst[index];
  52.                 forhead += tmp % 10;
  53.                 if (forhead > '9')
  54.                 {
  55.                     strRst[index] = '0' + (forhead - '9'-1);
  56.                     strRst[--index] += 1;
  57.                 }
  58.                 else
  59.                 {
  60.                     strRst[index--] = forhead;
  61.                 }
  62.                 plus = tmp / 10;
  63.             }
  64.             strRst[index] += plus;
  65.         }
  66.     }

  67.     if (strRst[0] == '0')
  68.     {
  69.         strRst.erase(i,1);
  70.     }
  71.     return 0;
  72. }
注:按位加的时候如果超过‘9’的时候需要进位
阅读(775) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~