高精(加减乘除)

24 篇文章 0 订阅
17 篇文章 0 订阅

高精,实际上使用数组模拟我们小学时列竖式的过程,所以当不会写时用python,列竖式的来想怎么解决。
高精加

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int main()
{
    int a2[1010],b2[1010],cl[1010];
    char al[1010],bl[1010];
    int i,a,b,c;
    scanf("%s",al);
    scanf("%s",bl);
    a=strlen(al);
    b=strlen(bl);
    memset(cl,0,sizeof(cl));
    for(i=0;i<a;i++)
    {
        a2[a-i]=al[i]-'0';
    }
    for(i=0;i<b;i++)
    {
        b2[b-i]=bl[i]-'0';
    }
    c=max(a,b);
    for(i=1;i<=c;i++)
    {
        cl[i]+=a2[i]+b2[i];
        cl[i+1]+=cl[i]/10;
        cl[i]%=10;
    }
    if(cl[i]!=0)
    {
        c++;
    }
    for(i=c;i>0;i--)
    {
        cout<<cl[i];
    }
    return 0;
}

高精减

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int main()
{
    int a2[10010],b2[10010],cl[10010];
    char al[10010],bl[10010];
    int i,a,b,c,k=0;
    memset(cl,0,sizeof(cl));
    scanf("%s",al);
    scanf("%s",bl);
    a=strlen(al);
    b=strlen(bl);
    for(i=0;i<a;i++) a2[a-i]=al[i]-'0';
    for(i=0;i<b;i++) b2[b-i]=bl[i]-'0';
    if(a<b) k=1;
    if(k==0&&a==b)
        for(i=max(a,b);i>0;i--)
            if(a2[i]<b2[i])
            {
                k=1;
                break;
            }
    if(k==1)
    {
        for(i=1;i<=max(a,b);i++)
            swap(a2[i],b2[i]);
        cout<<"-";
    }
    c=max(a,b);
    for(i=1;i<=c;i++)
    {
        cl[i]=cl[i]+a2[i]-b2[i];
        if(cl[i]<0&&i<c)
        {
            cl[i]+=10;
            cl[i+1]--;
        }
    }
    while(cl[c]==0&&c>1)
    {
        c--;
    }
    for(i=c;i>0;i--)
    {
        cout<<cl[i];
    }
    return 0;
}

高精乘

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int main()
{
    int a2[2010],b2[2010],cl[4020];
    char al[2010],bl[2010];
    int i,a,b,c,j;
    scanf("%s",al);
    scanf("%s",bl);
    a=strlen(al);
    b=strlen(bl);
    memset(cl,0,sizeof(cl));
    for(i=0;i<a;i++)
    {
        a2[a-i]=al[i]-'0';
    }
    for(i=0;i<b;i++)
    {
        b2[b-i]=bl[i]-'0';
    }
    c=a+b-1;
    for(i=1;i<=a;i++)
    {
        for(j=1;j<=b;j++)
        {
            cl[i+j-1]+=a2[i]*b2[j];
            cl[i+j]+=cl[i+j-1]/10;
            cl[i+j-1]%=10;
        }
    }
    c++;
    while(cl[c]==0&&c>1)
    {
        c--;
    }
    for(i=c;i>0;i--)
    {
        cout<<cl[i];
    }
    return 0;
}

高精除(向下取商)

#include<string>
#include<iostream>
using namespace std;
string a,c;
int b,d;
int main(){
    cin>>a>>b;
    for(int i=0;i<a.length();i++)a[i]-=48;
    for (int i=0;i<a.length();i++)
        c.push_back((d*10+a[i])/b+48),d=(d*10+a[i])%b;
    for (int i=0;c[0]==48;i++)c.erase(c.begin(),c.begin()+1);
    cout<<c;
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值