首页 > 其他分享 >高精度

高精度

时间:2022-09-04 20:25:59浏览次数:72  
标签:高精度 int s2 s1 ans 1005 include

高精加

计算a加b的值,a,b皆为不超过1000位的正整数。

#include<bits/stdc++.h>
#include<algorithm>
using namespace std;
string s1,s2;
int a[1005],b[1005],c[1005];
void init(){
	cin>>s1>>s2;
	reverse(s1.begin(),s1.end());
	reverse(s2.begin(),s2.end());
	a[0]=s1.size();
	b[0]=s2.size();
	for(int i=0;i<a[0];i++){
		a[i+1]=s1[i]-'0';
	}
	for(int i=0;i<b[0];i++){
		b[i+1]=s2[i]-'0';
	}
}
void add(){
	c[0]=max(a[0],b[0]);
	for(int i=1;i<=c[0];i++){
		c[i]+=a[i]+b[i];
		if(c[i]>9){
			c[i+1]++;
			c[i]-=10;
		}
	}
	if(c[c[0]+1]){
		c[0]++;
	}
	while(c[c[0]]==0&&c[0]>1){
		c[0]--;
	}
}
void print(){
	for(int i=c[0];i>=1;i--){
		cout<<c[i];
	}
}
int main(){
	init();
	add();
	print();
	return 0;
}

高精减

计算a减b的值,a,b皆为不超过1000位的非负整数。

#include<bits/stdc++.h>
#include<algorithm>
using namespace std;
string s1,s2;
int a[1005],b[1005],c[1005];
bool f(){
	if(s1.size()>s2.size())return true;
	if(s1.size()<s2.size())return false;
	for(int i=0;i<s1.size();i++){
		if(s1[i]<s2[i]){
			return false;
		}
	}
	return true;
}
void init(){
	cin>>s1>>s2;
	if(f()==false){
		cout<<"-";
		swap(s1,s2);
	}
	reverse(s1.begin(),s1.end());
	reverse(s2.begin(),s2.end());
	a[0]=s1.size();
	b[0]=s2.size();
	for(int i=0;i<a[0];i++){
		a[i+1]=s1[i]-'0';
	}
	for(int i=0;i<b[0];i++){
		b[i+1]=s2[i]-'0';
	}
}
void min(){
	c[0]=max(a[0],b[0]);
	for(int i=1;i<=c[0];i++){
		if(a[i]<b[i]){
			a[i+1]--;
			a[i]+=10;
		}
		c[i]=a[i]-b[i];
	}
	while(c[c[0]]==0&&c[0]>1){
		c[0]--;
	}
}
void print(){
	for(int i=c[0];i>=1;i--){
		cout<<c[i];
	}
}
int main(){
	init();
	min();
	print();
	return 0;
}

高精乘

计算a乘b的值,a,b皆为不超过1000位的非负整数。

#include<bits/stdc++.h>
#include<algorithm>
using namespace std;
string s1,s2;
int a[1005],b[1005],c[1005];
void init(){
	cin>>s1>>s2;
	reverse(s1.begin(),s1.end());
	reverse(s2.begin(),s2.end());
	a[0]=s1.size();
	b[0]=s2.size();
	for(int i=0;i<a[0];i++){
		a[i+1]=s1[i]-'0';
	}
	for(int i=0;i<b[0];i++){
		b[i+1]=s2[i]-'0';
	}
	c[0]=a[0]+b[0];
}
void time(){
	for(int i=1;i<=a[0];i++){
		for(int j=1;j<=b[0];j++){
			c[i+j-1]+=a[i]*b[j];
			if(c[i+j-1]>9){
				c[i+j]+=c[i+j-1]/10;
				c[i+j-1]%=10;
			}
		}
	}
	while(c[c[0]]==0&&c[0]>1){
		c[0]--;
	}
}
void print(){
	for(int i=c[0];i>=1;i--){
		cout<<c[i];
	}
}
int main(){
	init();
	time();
	print();
	return 0;
}

求2的n次方(0<=n<=100)

#include<bits/stdc++.h>
#include<algorithm>
using namespace std;
int n;
int a[120]={1,1};
void power(){
	for(int i=1;i<=a[0];i++){
		a[i]*=2;
	}
	for(int i=1;i<=a[0];i++){
		if(a[i]>=10){
			a[i+1]+=a[i]/10;
			a[i]%=10;
		}
		if(i==a[0]&&a[i+1]!=0)a[0]++;
	}
}
void in(){
	cin>>n;
	for(int i=1;i<=n;i++){
		power();
	}
}
void print(){
	for(int i=a[0];i>=1;i--){
		cout<<a[i];
	}
}
int main(){
	in();
	print();
    return 0;
}

高精度乘单精度,a乘b。 a是一个很大的非负整数,但不超过240位,b是一个非负整数,不超过10000,求a乘b。

#include<bits/stdc++.h>
#include<algorithm>
using namespace std;
string a;
int b,ans[250];
void in(){
	cin>>a>>b;
	reverse(a.begin(),a.end());
	for(int i=0;i<a.size();i++){
		ans[i+1]=a[i]-'0';
	}
	for(int i=0;i<a.size();i++){
		ans[i+1]*=b;
	}
	ans[0]=a.size();
	for(int i=1;i<=ans[0];i++){
		if(ans[i]>9){
			ans[i+1]+=ans[i]/10;
			ans[i]%=10;
		}
		if(ans[ans[0]+1]!=0)ans[0]++;
	}
	while(ans[ans[0]]==0&&ans[0]>1){
		ans[0]--;
	}
}
void print(){
	for(int i=ans[0];i>=1;i--){
		cout<<ans[i];
	}
}
int main(){
	in();
	print();
    return 0;
}

高精除

计算a除以b的值,a,b皆为不超过1000位的非负整数,输出商和余数

#include<bits/stdc++.h>
#include<algorithm>
using namespace std;
string s;
int x,y,k=1;
int a[1005],b[1005],c[1005];
void init(){
	cin>>s>>y;
	if(y==0){
		cout<<"Error";
		exit(0);
	}
	a[0]=s.size();
	b[0]=s.size();
	for(int i=0;i<s.size();i++){
		a[i+1]=s[i]-'0';
	}
	a[0]=s.size();
	c[0]=a[0];
}
void div(){
	for(int i=1;i<=c[0];i++){
		x=x*10+a[i];
		c[i]=x/y;
		x%=y;
	}
	while(c[k]==0)k++;
}
void print(){
	for(int i=k;i<=c[0];i++){
		cout<<c[i];
	}
	cout<<"......";
	cout<<x;
}
int main(){
	init();
	div();
	print();
	return 0;
}

请从键盘读入一个高精度整数a(不超过100位),再读入另一个单精度整数b(b不超过8位),请求出a除以b得到的商和余数

#include<bits/stdc++.h>
#include<algorithm>
using namespace std;
string a,ans;
int b,t,x;
int main(){
	cin>>a>>b;
	for(int i=0;i<a.size();i++){
		x=x*10+a[i]-'0';
		ans+=x/b+'0';
		x%=b;
	}
	while(ans[t]=='0'&&ans.size()>1)ans.erase(t,1);
	cout<<ans;//商
	cout<<endl<<x;//余数
    return 0;
}

标签:高精度,int,s2,s1,ans,1005,include
From: https://www.cnblogs.com/hnzzlxs01/p/16655923.html

相关文章

  • 503 高精度乘法
    视频链接:LuoguP1303A*BProblem #include<iostream>#include<cstring>#include<algorithm>usingnamespacestd;constintN=100005;intA[N],B[N],C[N];......
  • 502 高精度减法
    视频链接:LuoguP2142高精度减法#include<iostream>usingnamespacestd;constintN=110000;intA[N],B[N],C[N];intla,lb,lc;boolcmp(intA[],intB[]){......
  • 信息学一本通 1307:【例1.3】高精度乘法
    时间限制:1000ms      内存限制:65536KB提交数:47439   通过数:17996【题目描述】输入两个高精度正整数M和N(M和N均小于100位)。求这两个高精度数......
  • 501 高精度加法
    视频链接:LuoguP1601A+BProblem(高精)#include<iostream>usingnamespacestd;constintN=505;intA[N],B[N],C[N];intla,lb,lc;voidadd(){lc=max(la,l......
  • 车路协同、车联网、智慧交通、智能网联车、自动驾驶、无人驾驶、高精度地图
    车路协同、车联网、智慧交通、智能网联车、自动驾驶、无人驾驶、高精度地图17年11月开始工作,从事交通行业,主要为公路、高速、公交、交通相关项目。虽然是个Java开发工程师......
  • 高精度模板
    赌一手今年CSP必考高精。加法:#include<bits/stdc++.h>usingnamespacestd;stringa,b;vector<int>add(vector<int>A,vector<int>B){if(A.size()<......
  • 高精度
    高精度以下均为压位高精度高精度除高精度以二分法求以下均含divide带余数除法TODO:FFT高精度除高精度快速傅里叶加速乘法CodenamespaceFFT{usingcpx=complex<......
  • 高精度a+b
    高精度a+bacwing3596.a+b存在vector<int>中去,倒着存,低位在前,高位在后代码#include<iostream>#include<vector>#include<cstring>usingnamespacestd;vector<i......