基本高精度C++/C(1)

什么是高精度

众所周知,在C++和C里,有着各种各样的类型,且各有各的范围

类型名             			 		  	  取值范围
signed char        			   		     -128~127
unsiged char					  	  	    0~255
short int        			  	       -32768~32767
int            		 			  -2147483648~2147483647
unsigned int								0~4294967295
long         	          		  -2147483648~2141483647
unsigned long 								0~4294967295
long long 	 		     -9223372036854775808~9223372036854775807
unsigned long long 						    0~18446744073709551615

虽然longlong能表示出的数已经非常的大了,但是在某些时候,它依旧不够用

比如说,你要计算685111232的15次方,longlong就表示不出来,并且还会还给你一个内存溢出

,为了节约空间,同时让我们能够算出这些大数据,我们需要一种应用数组进行模拟计算的方法——高精度计算。

高精度数的读写

1.读入高精度数

直观地输入一个高精度数时,我们需要存储一个有很多很多位的数字.
如何存储?最直接的方法就是将它存入一个字符串.
例如,我们可以这样:

#include<bits/stdc++.h>
using namespace std;
int main(){
string a;
getline(cin,a);
}

2. 存储高精度数
现在,数据的读取完成了,我们应该如何处理这个数,让他变得方便于计算呢?
我们不妨再设置一个数组,然后将输入的数逆序存入,也就是将str的最后一位存入数组a的第0位、将str的倒数第二位存入数组a的第1位……这个时候就有人会问了:为什么要逆序存储?
这是因为,数据的长度毕竟不确定,高精度计算既然是利用数组计算,应当是需要每一位每一位对齐再处理运算. 如果顺序存储,两个数长度不一样,最后一位的下标也不同,最后处理运算时最后一位不能直接对齐,还要经过一个移位的操作,显然加大了计算机的操作量. 反之,如果我们采取逆序存储的方式,存入的数组从第0位开始依次是个位、十位、百位……这些对应关系不会随着数据的长度改变而改变,有利于后面对两个高精度数进行运算.

#include <string.h>

int a[100] = {0};//100应该为这个数据可能的最大位数.
for(int i = 0; i < strlen(str); ++i)
	a[i] = str[strlen(str) - i - 1] - '0';

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值