高精度乘除

发布时间 2023-07-21 14:15:48作者: siuuuuuuuu
//高精度乘法 
#include <bits/stdc++.h>
using namespace std;
char a[1005],b[1005]; 
int m[1005],n[1005],k[1006],h;
int main()
{
    cin>>a>>b;
    int la=strlen(a);
    int lb=strlen(b);//计算长度 
    for(int i=0; i<la; i++)
    {
        m[i]=a[la-1-i]-48;
    }
    for(int i=0; i<lb; i++)
    {
        n[i]=b[lb-1-i]-48;
    }//字符转数字 
    for(int i=0; i<la; i++)
    {
        for(int j=0; j<lb; j++)
        {
            k[i+j]=k[i+j]+m[i]*n[j];
        }
    }//相乘 
    for(int i=0; i<1005; i++)
    {
        k[i+1]=k[i+1]+k[i]/10;
        k[i]%=10;
    }//进位 
    for(h=1005; h>=0; h--)
    {
        if(k[h]!=0) break;
    }//去前导0 
    for(h=h; h>=0; h--)
    {
        cout<<k[h];
    }
    return 0;
}
//高精除以低精 
#include <bits/stdc++.h>
using namespace std;
int main()
{
    char a[1005];
    int b,ad[1005],k[1005];
    cin>>a>>b;
    int la=strlen(a);
    for(int i=0; i<=la-1; i++)
     ad[i+1]=a[i]-48;
     int x=0,p=1;
     for(int i=1; i<=la; i++)
     {
         k[i]=(x*10+ad[i])/b;
         x=(x*10+ad[i])%b;
     }//相除 
     while(k[p]==0&&p<la) p++; //去前导0                              
     for(int i=p; i<=la; i++)
     {
         cout<<k[i];
     }
     cout<<' '<<x;
    return 0;
}