C++应用之自定义大整数类

写在前面:C语言在应用时有很多整数溢出的情形,如果运算结果很大,就需要用到所谓的高精度算法,即用数组来储存整数,并模拟手算的方法进行四则运算,这些算法并不难实现,但是考虑到易用性问题,即如果能像使用int一样方便地使用大整数,在这里我们采取struct来构造大整数类。
结构体BigInteger可用于储存高精度非负整数。

struct BigInteger{
	static const int BASE = 100000000;
	static const int WIDTH=8;
	vector<int> s;
	
	BigInteger(long long num=0){
		*this=num; //构造函数 
	}
	//下面是针对于整数赋值和字符串赋值两种不同的赋值方式。
	BigInteger operator = (long long num){
		s.clear();
		do{
			s.push_back(num%BASE);
			num/=BASE;
		}while(num>0);
		return *this;
	}
	BigInteger operator = (const string& str) //赋值运算符
	{
		s.clear();
		int x,len=(str.length()-1) / WIDTH +1;
		for(int i=0;i<len;i++){
			int end=str.length() - i*WIDTH;
			int start=max(0,end-WIDTH);
			scanf(str.substr(start,end-start).c_str(),"%d",&x);//将长字符串分为几段来保存,每段的长度由end-start来决定
			s.push_back(x);
		} 
		return *this;
	}
}; 

其中,s用来保存大整数的各个数位。例如,若是要表示1234,第一种方式 x=1234,则s={4,3,2,1},若是第二种方式 x=“12345678912”,即字符串赋值,则s={45678912,123}。用vector而非数组保存数字我们不需要关心这个整数到底有多大,vector会自动根据情况申请和释放内存。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值