题解-洛谷P1303 A*B Problem(高精)
https://www.luogu.org/problemnew/show/P1303(题目传送门)
看到数据范围,显然要用高精度算法(乘法)。
首先用字符串读下这最多达10^2000的数,并判断符号。若为负号,我们只用把它的数值存到数组里就行了;否则,就将它所有元素都存到数组里。(注意,若两数异号,则需输出一个负号。)
之后就到了高精度乘法的核心:仍然用竖式的思想,通过几个例子发现,a[i]与b[i]的乘积都会被加到用与存储结果的输出c中的c[i+j-1]中。而对于c[i+j-1],我们只需要考虑a[i]*b[i]的值与它原来的值(进位与上次关于它的乘法)就好。若c[i+j-1]大于10,就让它的下一位c[i+j]+=c[i+j-1](即进位),并保留c[i+j-1]的个位。如此下来,就得到了结果——最多为i+j位的数,之后就开始判断(首位0)并输出了。
上代码:
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int a[],b[],c[];
char s1[],s2[];
int main()
{ cin>>s1>>s2;
bool fu=;
int j1=strlen(s1),j2=strlen(s2);
if(s1[]=='-')
{
--j1;
fu=!fu;
}
if(s2[]=='-')
{
--j2;
fu=!fu;
}
if(fu) cout<<'-';
for(int i=;i<=j1;++i)
a[i]=s1[strlen(s1)-i]-'';
for(int i=;i<=j2;++i)
b[i]=s2[strlen(s2)-i]-'';
for(int i=;i<=j1;++i)
{
for(int j=;j<=j2;++j)
{
c[i+j-]+=a[i]*b[j];
if(c[i+j-]>=)
{
c[i+j]+=c[i+j-]/;
c[i+j-]%=;
}
}
}
int k=j1+j2;
while(!c[k]&&k>) k--;
for(;k>=;k--)
cout<<c[k];
return ;
}
几点注意:
1、a数组和b数组倒序存的是输入数的大小,因此应将s1,s2的每一位-‘0’再存入数组(取字符与‘0’的相对位置,即字符代表意义上的数值的大小,而不是ASCLL码的大小)
2、(如果c全0的话)注意保留c最后一位0输出。(防止积为0但是没输出的情况)。
题解-洛谷P1303 A*B Problem(高精)的更多相关文章
- 洛谷 P1303 A*B Problem
P1303 A*B Problem 题目描述 求两数的积. 输入输出格式 输入格式: 两行,两个数. 输出格式: 积 输入输出样例 输入样例#1: 复制 1 2 输出样例#1: 复制 2 说明 每个数 ...
- 【洛谷P1303 A*B Problem】
题目描述 求两数的积. 输入输出格式 输入格式: 两行,两个数. 输出格式: 积 输入输出样例 输入样例#1: 1 2 输出样例#1: 2 说明 每个数字不超过10^2000,需用高精 emm,显然本 ...
- 题解-洛谷P1601 A+B Problem(高精)
https://www.luogu.org/problemnew/show/P1601(题目传送) 显然数据范围超过了long long类型,故不能简单的用两个长整型存起来相加.这里用到大数据的高精度 ...
- 洛谷1601 A+B Problem(高精) 解题报告
洛谷1601 A+B Problem(高精) 本题地址:http://www.luogu.org/problem/show?pid=1601 题目背景 无 题目描述 高精度加法,x相当于a+b pro ...
- 洛谷1303 A*B Problem 解题报告
洛谷1303 A*B Problem 本题地址:http://www.luogu.org/problem/show?pid=1303 题目描述 求两数的积. 输入输出格式 输入格式: 两个数 输出格式 ...
- 洛谷1001 A+B Problem
洛谷1001 A+B Problem 本题地址:http://www.luogu.org/problem/show?pid=1001 题目描述 输入两个整数a,b,输出它们的和(|a|,|b|< ...
- 洛谷P1865 A % B Problem
1.洛谷P1865 A % B Problem 题目背景 题目名称是吸引你点进来的 实际上该题还是很水的 题目描述 区间质数个数 输入输出格式 输入格式: 一行两个整数 询问次数n,范围m 接下来n行 ...
- 【洛谷P1601 A+B Problem(高精)】
题目背景 无 题目描述 高精度加法,x相当于a+b problem,[b][color=red]不用考虑负数[/color][/b] 输入输出格式 输入格式: 分两行输入a,b<=10^500 ...
- 洛谷 P1601 A+B Problem(高精)
P1601 A+B Problem(高精) 题目背景 无 题目描述 高精度加法,x相当于a+b problem,[b][color=red]不用考虑负数[/color][/b] 输入输出格式 输入格式 ...
随机推荐
- 或许,挂掉的点总是出人意料(hw其实蛮有好感的公司)
1:问了有没有考研的打算,为什么: ` 实验室指导自己的两个学长, 他们两个都是不考研党派,当然两个学长本科都进入了不错的公司hw,xm,耳濡目染就自己也就不想去考研了: 跟一些已经工作的程序员聊天, ...
- PGSQL-通过SQL语句来计算两个日期相差的天数
这是本人第一次写的~我在某次需求中遇到一个问题,如何在SQL语句中计算出两个日期的天数,然后用那个结果来进行数据的筛选呢?通过网上查阅了资料发现 date_part('day', cast(time1 ...
- Linux学习历程——Centos 7 touch命令
一.命令介绍 touch 命令用于创建空白文件,以及设置文件的时间. ----------------------------------------------------------------- ...
- hadoop 分析
Hadoop源代码分析(一) Google的核心竞争技术是它的计算平台.Google的大牛们用了下面5篇文章,介绍了它们的计算设施. GoogleCluster:http://research.goo ...
- HTML之间互相传参
如图所示,在index.html详情展示中给detailsPanel穿参数,在detailsPanel中获取到参数写ajax到后台获取json数据,那么如何在detailsPanel.html中获取传 ...
- Kubernetes - kubectl proxy
最近在玩flink部署在k8s上,但是k8s以前没玩过,参照前几天写的文章可部署一个简单的k8shttps://www.cnblogs.com/felixzh/p/9726244.html 在参照fl ...
- 21 python 初学(json pickle shelve)
json: # _author: lily # _date: 2019/1/19 import json my_dict = {'name': 'lily', 'age': 18} f = open( ...
- 洛谷 P1226 【模板】快速幂||取余运算
题目链接 https://www.luogu.org/problemnew/show/P1226 题目描述 输入b,p,k的值,求b^p mod k的值.其中b,p,k*k为长整型数. 输入输出格式 ...
- 使用Kernel NetEm和tc模拟复杂网络环境
关键词:netem(Network Emulator).tc(Traffic Control). 大部分局域网环境良好,但是产品实际网络环境可能千差万别,为了对产品进行各种情况测试就需要模拟网络环境. ...
- SpringBoot 数据篇之使用JDBC
SpringBootTutorial :: Data :: Jdbc 简介 API execute update query 实战 配置数据源 完整示例 引申和引用 简介 Spring Data 包含 ...