暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

数据结构C++|实例:POJ2389—大整数乘法运算(附视频)

585

本文摘自《数据结构在线编程实训(C++语言)(全程视频讲解版)》


1

【实战2.3】POJ2389—大整数乘法运算


时间限制:1000ms,内存限制:65536K。

问题描述:给定两个至少40位不超过200位的正整数,求它们的乘积。
输入格式:输入两行,每行一个大正整数。
输出格式:输出一行数字表示乘积,不包含前导的零。
输入样例:

11111111111111

1111111111

输出样例:

12345679011110987654321

解:由于输入的正整数至少40位,不能采用C++的整数类型变量存储,只能采用字符串存储。可以将大整数字符串看成若干位构成的,每一位看成一个元素,位与位之间为线性关系,提取各个位并采用vector<int>向量存储。
例如,a="123",b="45",转换为vector<int>向量x[2..0]={1,2,3}(x[0]放置最低位的数字),y[1..0]={4,5},求乘积z的过程如图2.2所示。归纳起来,假设x有m个数字,y有n个数字,z=x×y,z的位数最多为m+n,求z[k]如下:

再从低位到高位处理z,实现进位操作,即若z[i]≥10,求出进位数re=z[i]/10和余数z[i]%=10,再执行z[i+1]+=re将进位数累加到更高位中。最后输出z。

■ 图2.2 计算123×45的过程


对应的程序如下:

#include<iostream>
#include<vector>
#include<string>
const int MAX=202;
using namespace std;
void solve(string &a,string &b)        //求解算法
{ vector<int> x(MAX),y(MAX),z(2*MAX+1);
  int j=0;
  for(int i=a.length()-1;i>=0;i--) //转换为位,最低位在x[0]
    x[j++]=a[i]-'0';
  j=0;
  for(int i=b.length()-1;i>=0;i--)
    y[j++]=b[i]-'0';
  for(int i=0;i<a.length();i++) //求各位的乘法
    for(int j=0;j<b.length();j++)
      z[i+j]+=x[i]*y[j];
  for(int i=0;i<2*MAX;i++)
    if(z[i]>=10) //处理进位
    { int re=z[i]/10; //进位数
      z[i]%=10; //余数
      z[i+1]+=re; //进位数累加到更高位中
    }

  bool flag=false; //用于找最高非0位
  for(int i=2*MAX;i>=0;i--) //从高位开始
  { if(z[i]!=0) flag=true; //找到最高非0位,置flag=true
    if(flag==true) cout << z[i]; //找到最高非0位后输出各个位的数字
  }
  if (flag==false) cout << "0"; //所有数字均为0,输出一个0
  cout << endl;
}
int main()
{ string a,b;
  cin >> a;
  cin >> b;
  solve(a,b);
  return 0;
}


上述程序是AC代码,运行时间为16ms,占用空间为148K,编译语言为C++。


实例讲解

数据结构在线编程实训(C++语言)

往期回顾

【实战1.1】POJ1504—求倒数和的倒数

【实战1.2】HDU2114—求s(n)

【实战2.1】LeetCode26—删除排序数组中的重复项

【实战2.2】LeetCode24—两两交换链表中的结点


下期预告

【实战2.4】POJ1208—箱子操作




2

视频讲解



3

参考书籍


《数据结构在线编程实训(C++语言)(全程视频讲解版)》

ISBN:9787302585183

作者:李春葆、匡志强、蒋林

定价:69.8元

内容简介

本书是《数据结构教程(C++语言描述)》(第2版微课视频版)(李春葆等编著,清华大学出版社,以下简称为《教程》)的配套实战题和在线编程题实训指导书,详细给出了《教程》中所有实战题和在线编程题的解题思路和参考源代码,提供了全部题目的讲解视频。书中实战题和在线编程题不仅涵盖数据结构课程的基本知识点,还融合了各个知识点的运用和扩展,学习、理解和借鉴这些内容是掌握和提高编程能力的**捷径。本书自成一体,可以脱离《教程》单独使用,适合高等院校计算机及相关专业的学生使用。




4

精彩推荐


文章转载自清华计算机学堂,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论