
本文摘自《数据结构在线编程实训(C++语言)(全程视频讲解版)》
【实战2.3】POJ2389—大整数乘法运算
时间限制:1000ms,内存限制:65536K。
11111111111111
1111111111
12345679011110987654321

再从低位到高位处理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++语言)

往期回顾
下期预告
【实战2.4】POJ1208—箱子操作
视频讲解
参考书籍

《数据结构在线编程实训(C++语言)(全程视频讲解版)》
ISBN:9787302585183
作者:李春葆、匡志强、蒋林
定价:69.8元

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

精彩推荐
微信小程序游戏开发│猜数字小游戏(附源码+视频) Flink编程基础│Scala编程初级实践 Flink编程基础│FlinkCEP编程实践 Flink编程基础│DataStream API编程实践 Flink编程基础│DataSet API编程实践 数据分析实战│客户价值分析 数据分析实战│价格预测挑战 数据分析实战│时间序列预测 数据分析实战│KaggleTitanic生存预测


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




