高精度基础1:高精度?什么鬼!201809

写在前面:

高精度也叫大整数,指当运算过程,产生一些超出整形(int)甚至(longlong)的数据的时候,计算机不能使用内置的运算器进行运算的时候。

我们需要用数组来替代数位模拟运算,其实就是模拟运算的思维,对大数据范围的特殊处理,并不是特别神秘的东西。

高精度的相关代码,都是比较繁琐,需要你对每个细节构思清楚,是入门选手第一次感受到的“长代码”。

只要你学会了数组和拆数位,就能轻松理解哦!!今天我们就从四则运算开始,尝试理解高精度吧!

问:高精度是什么?

答:就是列竖式计算!!还是一步一步地写,最笨的那种!

===========================================================================================

知识点罗列:从 int ---> longlong ---> 高精度

1、什么是int:

用通俗的话讲,int范围内的数学运算,计算机都是口算完成的,非常快;

在目前的比赛机制下(2018年),NOIP默认用32位的系统进行编译和评测,所以我们平时定义的整数类型 int 的范围[-2^31 , 2^31 -1] 即 [-2147483648,2147483647]之间,在这个数据范围内,计算机可以通过二进制运算,O(1)的运算量算出答案;

2、什么是long long

用通俗的话讲,longlong 范围内的数学运算,计算机悄悄地自己列竖式计算,比较快;

从win7开始,计算机普遍已经进入64位的时代,在计算机的层面上int类型的数位长度已经增长到了2^64,

但是针对noi的相关比赛,编译器和评测机等客观条件的制约,还是要用特殊的数据类型来表示:long long。

long long 可以存储8字节8位可表达位数:2^64=18446744073709600000 

范围:-922 3372 0368 5477 5808 ~ 922 3372 0368 5477 5807 (922*10^16)

longlong的运算,本质也类似高精度,是一中模拟运算,只是效率会比较高。

3、如果数据超过了 long long 怎么办?高精度运算!!!

用通俗的话讲,超过longlong的数据运算,计算机罢工了,要我们教它“列竖式”在算出来答案,比较慢。

高精度的基础原理,其实就是将一个数字进行数位拆分,将每一个数位放到数组中独立的格子内,用一个数组来表示一个整数;进行算术运算的时候,再用函数的思维,人为地进行列竖式计算,一位一位地处理,时间复杂度和数据的长度有关;所以用高精度处理的数据,只是一堆独立数位的单个数字,而不是真正意义上的“数”。

===========================================================================================

知识回顾:列竖式计算

有同学会纠结,小学三年级我就会列竖式了,还需要您来回顾吗? 别急,难得有图,就看一看呗,又不收钱。

以a+b的样例:9584879778+93572018

1.1 我们进行一次详细的列竖式计算模拟:

第一步: 各数位分别求和

第二步:按顺序进位

根据以上两步操作:9584879778+93572018=1052059996

恭喜你!你已经完全理解了高精度加法的思维精髓

是不是一脸懵逼呢?!,别着急,ls不会骗你,你真的学会了思维,只是还不知道怎么用。

===========================================================================================

下面我们开始讲干货!

1、a+b问题

2、a-b问题;

猜你喜欢

转载自blog.csdn.net/liusu201601/article/details/82855674