C++高精度计算训练,高精度乘/除高精度/单精度

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

输入格式
两行数字,第一行是a,第二行是b。

输出格式
一行,输出a \times ba×b的计算结果。

样例
输入数据 1
111111111111111111111111111111111111
10
输出数据 1
1111111111111111111111111111111111110

#include<bits/stdc++.h>
using namespace std;
const int mx=300;
string a;
int b; 
int c[mx],i,p,x;
int main()
{
    
    
	cin>>a>>b;
	int l=a.size();
	for(int i=0; i<=mx-1; i++) c[i]=0;

	for(int i=0; i<=l-1; i++) c[i]=a[l-1-i]-'0';
	

	for(int i=0; i<=l-1; i++) c[i]*=b;
	
	for(int i=0; i<=l-1; i++)
		{
    
    
			x=c[i];
			c[i]=x%10;
			c[i+1]+=x/10;
		}

	int p=l;
	while(c[p]==0&&p>0) p--;
	for(; p>=0; p--) cout<<c[p];
	return 0;
}

高精度乘高精度
说明
高精度乘,求两个很大的非负整数相乘的结果。

输入格式
2个非负整数,每个一行,每个整数不超过240位。

输出格式
一个整数,表示相乘的结果。

样例
输入数据 1
1111111111111111111111111
2222222222222222222222222
输出数据 1
2469135802469135802469135308641975308641975308642

#include<bits/stdc++.h>
using namespace std;
string gjdjf(string o,string p){
    
    //高精度加法 
	if(o.size()<p.size()){
    
    
		swap(o,p);
	}
	while(p.size()<o.size()){
    
    
		p="0"+p;
	}
	int j=0;
	int ut;
	string op="";
	for(int i=p.size()-1;i>=0;i--){
    
    
		int t=p[i]-'0';
		int u=o[i]-'0';
		ut=u+t+j;
		if(ut>=10){
    
    
			j=ut%10;
			ut/=10;
		}
		char ch=ut+'0';
		op=ch+op;
	}
	if(j>0){
    
    
		char ch=j+'0';
		op=ch+op;
	}
	return op;
}
string gjdcf(string k,string l){
    
    
	int o[100010],p[100010];
	for(int i=l.size()-1;i>=0;i--){
    
    
		int m=l[i]-'0';
		for(int n=k.size()-1;n>=0;n--){
    
    
			int y=k[n]-'0';//l.size()-1-i位和k.size()-n位* 
			y*=m;
			o[l.size()-i+k.size()-n-1]+=y; 
		}
	}
	int kl,oi=0;
	string nm="";
/*	for(int i=0;i<=l.size()+k.size();i++){
		cout<<o[i]<<endl;
	}*/
	for(int i=1;i<=l.size()+k.size()-1;i++){
    
    
		o[i]+=oi;
//		cout<<o[i]<<" ";
		if(o[i]>=10){
    
    
			oi=o[i]/10;
			o[i]%=10;
		}
		else{
    
    
			oi=0;
		}
//		cout<<o[i]<<endl;
		char ch=o[i]+'0';
		nm=ch+nm;
	}
	if(oi>0){
    
    
		char ch=oi+'0';
		nm=ch+nm;
	}
	return nm;
}
int main(){
    
    
	string x,k;
	cin>>x>>k;
	cout<<gjdcf(x,k);
	return 0;
}

高精度除单精度
说明
输入一个高精度整数a(不超过100位),和一个单精度整数b(b不超过8位),请求出a除以b得到的商。

输入格式
输入有2行,第一行有一个整数a,第二行有一个整数b。

输出格式
输出a/b得到的商。

样例
输入数据 1
8162148605591693302243
20136
输出数据 1
405351043185920406

//高精度除法 1
#include<bits/stdc++.h>
using namespace std;
const int mx=1010;
string s;
int a[mx],c[mx],i,n,la,lc,x;
int main(){
    
    
	cin>>s>>n;
	la=s.size();
	for(i=0;i<la;i++) a[i+1]=s[i]-'0';
	for(i=1;i<=la;i++){
    
    
		c[i]=(x*10+a[i])/n;
		x=(x*10+a[i])%n;
	}
	lc=1;
	while(c[lc]==0 && lc<la)
		lc++;
	for(i=lc;i<=la;i++)
		cout<<c[i]; 
	return 0;
}

猜你喜欢

转载自blog.csdn.net/yaosichengalpha/article/details/131573479