【C++】阶乘相加问题_向量vector以及高精度计算

向量vector

洛谷原题 https://www.luogu.com.cn/problem/P1009
洛谷这道题目要求用高精度写阶乘,但是我还没有学过。从网上扒各种资料和网课,发现在学习高精度之前,需要知道vector这个容器。

什么是vector

vector是一个封装了动态大小数组的顺序容器,属于C++STL。可以简单认为。vector是一个能够存放任意类型的动态数组。

使用vector

使用vector需要在文件开头加上
#include< vector >
using namespace std;

原文链接:https://blog.csdn.net/qq_38654981/article/details/81907134
https://blog.csdn.net/w_linux/article/details/71600574
vector的初始化:

  1. vector<类型>标识符 //vector a
  2. vector<类型>标识符(最大容量) //vectora(10)
  3. vector<类型>标识符(最大容量,初始所有值) //vectora(10,1)
  4. int b[7]={1,2,3,4,5,9,8}; vector a(b,b+7); //从数组中获得初值
  5. vector< vector< int> >v; 二维向量 //这里最外的<>要有空格。否则在比较旧的编译器下无法通过
  6. vector a(b); //用b向量来创建a向量,整体复制性赋值

vector函数合集
https://blog.csdn.net/w_linux/article/details/71600574
在这里插入图片描述

高精度计算

学完vector后开始学习高精度计算

高精度计算实际上就是将大数据存储到字符串中,手动进行运算和重新储存。其原理大致相同,算法不同。

高精度加法

#include <iostream>
//<vector>自带一个size函数求长度 
#include <vector> 
using namespace std;
//数组长度+10防止边界问题 
const int N=1e6+10;
//写一个方法返回vector类型 
//这里取地址符是因为引用类型更快 
//C=A+B
vector<int> add(vector<int> &A,vector<int> &B){
   
	vector<int> C;
	int t =0;//这是进位,同时用来存放数据 
	for (int i=0;i<A.size()||i<B.size();i++){
   
		 if(i<A.size()) t+=A[i];
		 if(i<B.size()) t+=B[i];
		 //当前位只能储存数据t的个位数 
		 C.push_back(t%10);
		 //让t整除10 
		 t/=10;
	}
	//如果此时t仍然有数,则进1 
	if(t) C.push_back(1);
	return C;
}
int main(){
   
	//数字太长,用字符串读取 
	string a,b;
	vector<int>A,B;
	cin>>a>>b; //a="123456"
	for(int i=a.size()-1;i>=0;i--)A.push_back(a[i]-'0');
	//倒序存储//字符变整数减去'0' 
	for(int i=b.size()-1;i>=0;i--)B.push_back(b[i]-'0');
	auto C = add(A,B);
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值