2 solutions

  • 1
    @ 2025-3-25 20:48:19

    高精除改动,超短、简洁

    #include<bits/stdc++.h>
    using namespace std;
    string x,y;
    int a[350],b[350],c[350],d[350],la,lb;
    bool pd(int last, int len){
        for(int k=last+len;k<350;++k)if(d[k]!=0)return true;
        for(int i=len-1;i>=0;i--){
            if(d[last+i]>b[i])return true;
            if(d[last+i]<b[i])return false;
        }
        return true;
    }
    void div(){
        for(int i=la-lb;i>=0;i--){
            while(pd(i,lb)){
                for(int j=0;j<lb;j++){
                    d[i+j]-=b[j];
                    if(d[i+j]<0)d[i+j+1]--,d[i+j]+=10;
                }
                c[i]++;
                for(int j=i;j<350&&c[j]>=10;++j)c[j+1]+=c[j]/10,c[j]%=10;
            }
        }
    }
    int main() {
        cin>>x;
        y="13";
        la=x.size(),lb=y.size();
        for(int i=0;i<la;++i)a[la-i-1]=d[la-i-1]=x[i]-'0';
        for(int i=0;i<lb;++i)b[lb-i-1]=y[i]-'0';
        div();
        bool f=false;
        for(int i=349;i>=0;i--)if(c[i]!=0||f)f=true,cout<<c[i];
        if(!f)cout<<0;
        cout<<endl;
        f=false;
        for(int i=349;i>=0;i--)if(d[i]!=0||f)f=true,cout<<d[i];
        if(!f)cout<<0;
        return 0;
    }
    
    • 0
      @ 2024-1-20 11:53:33

      自己抄

      #include <bits/stdc++.h>
      using namespace std;
      int a[1005],b[1005],c[1005],d[1005];
      int LEN = 1005; 
      bool greater_eq(int a[], int b[], int last_dg, int len)
      {
      	if(a[last_dg + len] != 0) 
      	{
      		return true;
      	}
      	for(int i = len - 1; i >= 0; i--)
      	{
      		if(a[last_dg + i] > b[i]) return true;
      		if(a[last_dg + i] < b[i]) return false;
      	}
      	return true;
      }
      void read(int a[],int b[])
      {
      	char x[LEN + 1];
      	cin >> x;
      	int lenx = strlen(x);
      	for(int i = 0;i < lenx;i++) 
      	{
      		a[lenx - i - 1] = x[i] -'0';
      	}
      	b[1] = '1' -'0';
      	b[0] = '3' -'0';
      }
      void div(int a[],int b[],int c[],int d[])
      {
      	int la, lb;
      	for(la = LEN - 1;la > 0;la--) 
      	{
      		if(a[la - 1] != 0) break;
      	}
      	for(lb = LEN - 1;lb > 0;lb--) 
      	{
      		if(b[lb - 1] != 0) break;
      	}
      	if(lb == 0)
      	{
      		puts("除数不能为零"); 
      		return; 
      	}
      	for(int i = 0; i < la;i++) d[i] = a[i];
      	for(int i = la - lb;i >= 0;i--)
      	{
      		while(greater_eq(d,b,i,lb))
      		{
      			for(int j = 0; j < lb;j++)
      			{
      				d[i + j] -= b[j];
      				if(d[i + j] < 0)
      				{
      					d[i + j + 1] -= 1;
      					d[i + j] += 10; 
      				}
      			}
      			c[i] += 1;
      		}
      	}
      }
      void prin(int c[])
      {
      	int i;
      	for(i = LEN - 1;i >= 1;i--) 
      	{
      		if(c[i] != 0)
      		{
      			break;
      		}
      	}
      	for(;i >= 0;i--)
      	{
      		cout << c[i];
      	}
      	cout << endl;
      	for(i = LEN - 1;i >= 1;i--) 
      	{
      		if(d[i] != 0)
      		{
      			break;
      		}
      	}
      	for(;i >= 0;i--)
      	{
      		cout << d[i];
      	}
      }		
      
      int main()
      {
      	read(a,b);
      	div(a,b,c,d);
      	prin(c);
      	return 0;
      } 
      
      • 1

      Information

      ID
      661
      Time
      1000ms
      Memory
      256MiB
      Difficulty
      3
      Tags
      # Submissions
      44
      Accepted
      25
      Uploaded By