something about 高精

·First 高精加

#include <bits/stdc++.h>
#include <cstdio>
using namespace std;
int a[100000];
int b[100000];
void gaojing(int a[],int b[])
{
	int k=0;
	if(a[0]>=b[0])
	{
		k=a[0];
	}
	else
	{
		k=b[0];
	}
	for(int i=1;i<=k;i++)
	{
		a[i+1]+=(a[i]+b[i])/10;
		a[i]=(a[i]+b[i])%10;
	}
	if(a[k+1]>0)
	{
		a[0]=k+1;
	}
	else
	{
		a[0]=k;
	}
}
int main ()
{
	string s1,s2;
	cin>>s1>>s2;
	memset(a,0,sizeof(a));
	memset(a,0,sizeof(b));
	a[0]=s1.length();
	b[0]=s2.length();
	for(int i=1;i<=a[0];i++)
	{
		a[i]=s1[a[0]-i]-'0';
	}
	for(int i=1;i<=b[0];i++)
	{
		b[i]=s2[b[0]-i]-'0';
	}
	gaojing(a,b);
	for(int i=a[0];i>0;i--)
	{
		cout<<a[i];
	}
	cout<<endl;
	return 0;
}

·Second 高精减

#include<iostream>
#include<cstring>
using namespace std;
int a[10010],b[10010],c[10010];
char s1[10010],s2[10010],s3[10010];
int main(){
    cin>>s1>>s2;
    int la,lb,lc,i,x;
    la=strlen(s1);
    lb=strlen(s2);
    if(la<lb||la==lb && strcmp(s1,s2)<0){
    swap(s1,s2);
    swap(la,lb);
        cout<<"-";
    }
    for(i=1;i<=la;i++)
    a[i]=s1[la-i]-48;
    for(i=1;i<=lb;i++)
    b[i]=s2[lb-i]-48;
    lc=1;
    while(lc<=la){
    if(a[lc]<b[lc]){
    a[lc]+=10;
    a[lc+1]--;
    }
    c[lc]=a[lc]-b[lc];
    lc++;
    }
    while(c[lc]==0&&lc>1){
 	lc--;
    }
    for(int i=lc;i>=1;i--){
 	cout<<c[i];}
    return 0;
}

·Third 高精乘

#include<bits/stdc++.h>
using namespace std;
string s1,s2;
int loa,lob,loc,a[10005],b[10005],c[20005]; 
int main()
{
    cin>>s1>>s2; 
    loa=s1.length();
    lob=s2.length();
    if(s1[0]=='0' || s2[0]=='0')
    {
        cout<<0;
        return 0;
	}
	if(loa<lob || (loa==lob && s1[0]<s2[0]))
	{ 
		swap(s1,s2);
    	swap(loa,lob);
	}
    if(s1[0]=='-' && s2[0]!='-')
    {
        cout<<"-";
        s1[0]=' ';
        s2=' '+s2;
    }
    if(s2[0]=='-' && s1[0]!='-')
    {
        cout<<"-";
        s2[0]=' ';
        s1=' '+s1;
    }
    if(s1[0]!='-' && s2[0]!='-')
    {
        s1=' '+s1;
        s2=' '+s2;
    }
    if(s1[0]=='-' && s2[0]=='-')
    {
        s1[0]=' ';
        s2[0]=' ';
	}
    for(int i=1;i<=loa;i++)
    {
		a[i]=s1[loa-i+1]-'0';
	}
    for(int i=1;i<=lob;i++)
    {
		b[i]=s2[lob-i+1]-'0'; 
	}
    for(int i=1;i<=lob;i++)
    {
		for(int j=1;j<=loa;j++)
    	{
			c[i+j-1]=c[i+j-1]+(b[i]*a[j]);
			c[i+j]+=c[i+j-1]/10;
			c[i+j-1]%=10;    
		}	
	}
    int loc=loa+lob;
    while(loc>0 && c[loc]==0)
    {
    	loc--;
	}
    for(int i=loc;i>=1;i--)
    {
    	cout<<c[i];
	}        
    return 0;
}

·Fourth 高精除低精

#include <bits/stdc++.h>
#include <cstdio>
using namespace std;
string st;
long long s,i,x,n,a[10001],l,b[10001];
int main()
{
    cin>>st>>s;
    l=st.size();
    for (i=1;i<=l;++i)   
    {
        a[i]=st[i-1]-48;	
    }
    for (i=1;i<=l;++i)
    {
        x=x*10+a[i];
        b[i]=x / s;
        x=x % s;
    }
    n=1;
    while(b[n]==0 && n<l)
    {
        n++;	
    }
    for (i=n;i<=l;++i)
    {
        cout<<b[i];
    }
    cout<<endl;
    return 0;
}

作为一个蒟蒻,当然不会写高精除高精的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值