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(高精)的更多相关文章

  1. 洛谷 P1303 A*B Problem

    P1303 A*B Problem 题目描述 求两数的积. 输入输出格式 输入格式: 两行,两个数. 输出格式: 积 输入输出样例 输入样例#1: 复制 1 2 输出样例#1: 复制 2 说明 每个数 ...

  2. 【洛谷P1303 A*B Problem】

    题目描述 求两数的积. 输入输出格式 输入格式: 两行,两个数. 输出格式: 积 输入输出样例 输入样例#1: 1 2 输出样例#1: 2 说明 每个数字不超过10^2000,需用高精 emm,显然本 ...

  3. 题解-洛谷P1601 A+B Problem(高精)

    https://www.luogu.org/problemnew/show/P1601(题目传送) 显然数据范围超过了long long类型,故不能简单的用两个长整型存起来相加.这里用到大数据的高精度 ...

  4. 洛谷1601 A+B Problem(高精) 解题报告

    洛谷1601 A+B Problem(高精) 本题地址:http://www.luogu.org/problem/show?pid=1601 题目背景 无 题目描述 高精度加法,x相当于a+b pro ...

  5. 洛谷1303 A*B Problem 解题报告

    洛谷1303 A*B Problem 本题地址:http://www.luogu.org/problem/show?pid=1303 题目描述 求两数的积. 输入输出格式 输入格式: 两个数 输出格式 ...

  6. 洛谷1001 A+B Problem

    洛谷1001 A+B Problem 本题地址:http://www.luogu.org/problem/show?pid=1001 题目描述 输入两个整数a,b,输出它们的和(|a|,|b|< ...

  7. 洛谷P1865 A % B Problem

    1.洛谷P1865 A % B Problem 题目背景 题目名称是吸引你点进来的 实际上该题还是很水的 题目描述 区间质数个数 输入输出格式 输入格式: 一行两个整数 询问次数n,范围m 接下来n行 ...

  8. 【洛谷P1601 A+B Problem(高精)】

    题目背景 无 题目描述 高精度加法,x相当于a+b problem,[b][color=red]不用考虑负数[/color][/b] 输入输出格式 输入格式: 分两行输入a,b<=10^500 ...

  9. 洛谷 P1601 A+B Problem(高精)

    P1601 A+B Problem(高精) 题目背景 无 题目描述 高精度加法,x相当于a+b problem,[b][color=red]不用考虑负数[/color][/b] 输入输出格式 输入格式 ...

随机推荐

  1. leetcode-48.旋转图像

    leetcode-48.旋转图像 point: 数组 题意 给定一个 n × n 的二维矩阵表示一个图像. 将图像顺时针旋转 90 度. 说明: 你必须在原地旋转图像,这意味着你需要直接修改输入的二维 ...

  2. Netty学习笔记(二) 实现服务端和客户端

    在Netty学习笔记(一) 实现DISCARD服务中,我们使用Netty和Python实现了简单的丢弃DISCARD服务,这篇,我们使用Netty实现服务端和客户端交互的需求. 前置工作 开发环境 J ...

  3. 电信中兴F460光猫sendcmd命令

    1.安装xshell后,使用命令行登陆root用户,root用户密码Zte521(湖北地区) 2.查看所有用户密码  sendcmd 1 DB p DevAuthInfo 3.打开网页登陆teleco ...

  4. Redis操作list

    来自:http://www.cnblogs.com/alex3714/articles/6217453.html List操作,redis中的List在在内存中按照一个name对应一个List来存储. ...

  5. 【English】20190415

    approximately大约 [əˈprɑ:ksɪmətli] This install will take + minutes and requires the download of appro ...

  6. 虚拟DOM和react中的diff算法总结

    https://blog.csdn.net/qq_26708777/article/details/78107577 一.虚拟DOM 1.什么是虚拟DOM及原理        把真实DOM树,变成js ...

  7. matlab读取csv文件数据并绘图

    circle.m(画二维圆的函数) %该函数是画二维圆圈,输入圆心坐标和半径%rectangle()函数参数‘linewidth’修饰曲线的宽度%'edgecolor','r',edgecolor表示 ...

  8. Linux内核入门到放弃-设备驱动程序-《深入Linux内核架构》笔记

    I/O体系结构 总线系统 PCI(Peripheral Component Interconnect) ISA(Industrial Standard Architecture) SBus IEEE1 ...

  9. Java面试准备之JVM

    介绍JVM中7个区域,然后把每个区域可能造成内存的溢出的情况说明 程序计数器:看做当前线程所执行的字节码行号指示器.是线程私有的内存,且唯一一块不报OutOfMemoryError异常. Java虚拟 ...

  10. 线性回归和Logistic回归

    目录 线性回归 用线性回归模型拟合非线性关系 梯度下降法 最小二乘法 线性回归用于分类(logistic regression,LR) 目标函数 如何求解\(\theta\) LR处理多分类问题 线性 ...