算法基础课(高精度)

高精度加法

#include<iostream>
#include<vector>
using namespace std;
const int maxn=1e6+10;
//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];
		C.push_back(t%10);
		t/=10;	
	}
	if(t)C.push_back(t);
	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');//A=[6,5,4,3,2,1] 
	for(int i=b.size()-1;i>=0;i--)B.push_back(b[i]-'0');
	auto C=add(A,B);
	for(int i=C.size()-1;i>=0;i--)
	{
		cout<<C[i];
	}
	return 0; 
 } 
#include <iostream>
#include<vector>
using namespace std;

const int maxn=1e6+10;
int a[maxn];

vector<int> add(vector<int>&A,vector<int>&B)
{
	vector<int>c;
	if(A.size()<B.size())return add(B,A);
	int t=0;
	for(int i=0;i<A.size();i++)
	{
		t+=A[i];
		if(i<B.size())t+=B[i];
		c.push_back(t%10);
		t/=10;
	}
	if(t)c.push_back(t);
	return c;
}

int main() {
	string a,b;
	vector<int>A,B;
	
	cin>>a>>b;
	for(int i=a.size()-1;i>=0;i--)A.push_back(a[i]-'0');
	for(int i=b.size()-1;i>=0;i--)B.push_back(b[i]-'0');
	auto c=add(A,B);
	for(int i=c.size()-1;i>=0;i--)printf("%d",c[i]);
		
    return 0;
}

高精度减法

#include<iostream>
#include<vector>
using namespace std;
const int maxn=1e6+10;
bool cmp(vector<int>&A,vector<int>&B)
{
	if(A.size()!=B.size())return A.size()>B.size();
	for(int i=A.size()-1;i>=0;i--)
	{
		if(A[i]!=B[i])return A[i]>B[i]; 
	}
	return true;//两个数相等 
}
// C = A - B, 满足A >= B, A >= 0, B >= 0
vector<int> sub(vector<int> &A, vector<int> &B)
{
    vector<int> C;
    for (int i = 0, t = 0; i < A.size(); i ++ )
    {
        t = A[i] - t;
        if (i < B.size()) t -= B[i];
        C.push_back((t + 10) % 10);//push_back(x)就是在vector后面添加一个元素x
        if (t < 0) t = 1;
        else t = 0;
    }
    //pop_back()用来删除vector的尾元素 
	//back()可以获得尾部元素
    while (C.size()>1&&C.back()==0)C.pop_back();//去掉0 
    return C;
}

int main()
{
	string a,b;
	/*
	例如 输入字符串a=1234;则a[0]=1,a[1]=2,a[2]=3,a[3]=4 
	*/
	vector<int>A,B;
	//push_back(x)就是在vector后面添加一个元素x
	/*
	例如:输入字符串a=1234,执行for语句时A[0]=4,A[1]=3;A[2]=1,A[3]=0; 
	*/
	cin>>a>>b;//a=123456 
	for(int i=a.size()-1;i>=0;i--)A.push_back(a[i]-'0');//A=[6,5,4,3,2,1] 
	for(int i=b.size()-1;i>=0;i--)B.push_back(b[i]-'0');
	if(cmp(A,B))
	{
		auto C=sub(A,B);
		for(int i=C.size()-1;i>=0;i--)
	    {
		   cout<<C[i];
	    }
	}
	else{
		cout<<"-";
		auto C=sub(B,A);
		for(int i=C.size()-1;i>=0;i--)
	    {
		   cout<<C[i];
	    }
	}
	
	return 0; 
 } 

高精度乘法

#include<iostream>
 #include<vector>
 using namespace std;
 
 vector<int>mul(vector<int>&a,int b)
 {
 	vector<int>c;
 	int t=0;
 	for(int i=0;i<a.size();i++)
 	{
 		t+=a[i]*b;
 		c.push_back(t%10);//push_back(x)就是在vector后面添加一个元素x
 		t/=10;
	 }
	 //pop_back()用来删除vector的尾元素 
	//back()可以获得尾部元素
	 c.push_back(t);
	 while(c.size()>1&&c.back()==0)c.pop_back();//去掉0 
	 return c;
 	
  } 
  int main()
  {
  	string a;
  	/*
	例如 输入字符串a=1234;则a[0]=1,a[1]=2,a[2]=3,a[3]=4 
	*/
  	int b;
  	cin>>a>>b;//a=123456 
  	vector<int>A;
  	//push_back(x)就是在vector后面添加一个元素x
	/*
	例如:输入字符串a=1234,执行for语句时A[0]=4,A[1]=3;A[2]=1,A[3]=0; 
	*/
  	for(int i=a.size()-1;i>=0;i--)A.push_back(a[i]-'0');//A=[6,5,4,3,2,1] 
  	auto C=mul(A,b);
  	for(int i=C.size()-1;i>=0;i--)cout<<C[i];
	  return 0;
  }

高精度除法

#include<iostream>
#include<algorithm>
 #include<vector>
 using namespace std;
 
 //A/b 商是C,余数是r
vector<int> div(vector<int> &A,int b,int &r)
{   //&r代表传入r的地址,便于直接对余数r进行修改
    vector<int> C;
    //push_back(x)就是在vector后面添加一个元素x
    for(int i=0;i<A.size();i++)
    {   //对A从最高位开始处理
        r=r*10+A[i];//将上次的余数*10在加上当前位的数字,便是该位需要除的被除数
        C.push_back(r/b);//所得即为商在这一位的数字
        r=r%b;
    }
    /*由于在除法运算中,高位到低位运算,
    因此C的前导零都在vector的前面而不是尾部,vector只有删除最后一个数字pop_back是常数复杂度,
    而对于删除第一位没有相应的库函数可以使用,而且删除第一位,其余位也要前移,*/
    //因此我们将C翻转,这样0就位于数组尾部,可以使用pop函数删除前导0
    reverse(C.begin(),C.end());
    //pop_back()用来删除vector的尾元素 
    //back()可以获得尾部元素 
    while(C.size()>1&&C.back()==0) C.pop_back();//去掉0 
    return C;
}
  int main()
  {
  	string a;//a是被除数 
  	/*
	例如 输入字符串a=1234;则a[0]=1,a[1]=2,a[2]=3,a[3]=4 
	*/
  	int b,r=0;//b是除数,r为余数 
  	cin>>a>>b;//a=123456 
  	vector<int>A;
  	//A是由高为传输至低位,由于在除法的手算过程中,发现从高位进行处理
  	//push_back(x)就是在vector后面添加一个元素x
	/*
	例如:输入字符串a=1234,执行for语句时A[0]=4,A[1]=3;A[2]=1,A[3]=0; 
	*/
  	for(int i=0;i<a.size();i++) A.push_back(a[i]-'0');
  	auto C=div(A,b,r);
  	for(int i=C.size()-1;i>=0;i--)cout<<C[i];
  	cout<<endl<<r;
	  return 0;
  }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: acwing算法基础课是一门针对算法学习的在线课程,在这门课程中,学生可以系统地学习和掌握算法基础知识,提高编程水平。为了方便学生学习,acwing提供了网盘服务。 acwing算法基础课网盘是一个用于存储课程资源的平台。通过这个网盘,学生可以下载课程讲义、代码模板以及补充材料等。这些资源都经过精心整理,供学生们参考和学习。 网盘中的资源是按照课程章节进行分类的,学生可以根据自己的学习需要,选择性地下载所需的资料。同时,网盘还提供了搜索功能,方便学生快速定位和获取所需资料。 acwing算法基础课网盘的使用对于学生们的学习非常有帮助。通过下载和学习这些资源,学生们可以更好地理解课程内容,加深对算法的理解。此外,学生们还可以通过研究代码模板,学习优秀的编程思想和技巧,提高自己的编程能力。 总之,acwing算法基础课网盘是一项非常便利和实用的服务,为学生们提供了更加全面和深入的学习资源,帮助他们更好地掌握和运用算法知识。 ### 回答2: acwing算法基础课是一门优质的算法学习资源,其中的课程内容丰富多样,涵盖了算法基础知识、数据结构、动态规划、图论等等。很多学习者都认为这门课程对他们的算法学习有很大的帮助。 网盘是指以网络为媒介,提供文件存储和下载服务的云存储平台。acwing算法基础课也提供了网盘服务,方便学习者下载课程资料并进行学习。 通过acwing算法基础课网盘,学习者可以方便地获取到课程的各种学习资料,包括讲义、习题集、代码示例等。这些资料可以帮助学习者更好地理解和掌握课程的内容。此外,网盘还提供了上传和分享功能,学习者可以将自己的学习心得、代码等资料分享给其他学习者,促进学习者之间的互相学习和交流。 acwing算法基础课网盘的优点不仅仅是方便快捷的下载和分享功能,还包括安全可靠的存储环境。学习者可以放心地将自己的学习资料上传到网盘进行备份,减少数据丢失的风险。同时,网盘还提供了多种存储空间容量的选择,满足学习者不同的需求。 总的来说,acwing算法基础课网盘为学习者提供了方便、安全和多样化的学习资源下载和分享服务,为学习者的算法学习和进步提供了有力的支持。如果你对算法感兴趣,我推荐你去尝试一下这门精彩的课程!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值