3 solutions

  • 6
    @ 2023-11-22 21:44:30

    知道我修改错误有多累吗?

    #include<bits/stdc++.h>
    using namespace std;
    int a[501],b[501],c[501],d,i;
    void init(int a[]){
    	string s;
    	cin>>s;
    	a[0]=s.length();
    	for(i=1;i<=a[0];i++)
    	a[i]=s[a[0]-i]-'0';
    }
    void print(int a[]){
    	int i;
    	if(a[0]==0){
    		cout<<0<<endl;
    		return;
    	}
    	for(i=a[0];i>0;i--)
    	cout<<a[i];
    	cout<<endl;
    	return;
    }
    int compare(int a[],int b[]){
    	int i;
    	if(a[0]>b[0])
    	return 1;
    	if(a[0]<b[0])
    	return -1;
    	for(i=a[0];i>0;i--){
    		if(a[i]>b[i])
    		return 1;
    		if(a[i]<b[i])
    		return -1;
    	}
    	return 0;
    }
    void jian(int a[],int b[]) {
    	int flag,i;
    	flag=compare(a,b);
    	if(flag==0){
    		a[0]=0;
    		return;
    	}
    	if(flag==1){
    		for(i=1;i<=a[0];i++){
    			if(a[i]<b[i]){
    				a[i+1]--;
    				a[i]+=10;
    			}
    			a[i]-=b[i];
    		}
    		while(a[0]>0&&a[a[0]]==0)
    		a[0]--;
    		return;
    	}
    }
    void numcpy(int p[],int q[],int det){
    	for(int i=1;i<=p[0];i++)
    	q[i+det-1]=p[i];
    	q[0]=p[0]+det-1;
    }
    void chugao(int a[],int b[],int c[]){
    	int i,tmp[501];
    	c[0]=a[0]-b[0]+1;
    	for(i=c[0];i>0;i--){
    		memset(tmp,0,sizeof(tmp));
    		numcpy(b,tmp,i);
    		while(compare(a,tmp)>=0){
    			c[i]++;
    			jian(a,tmp);
    		}
    	}
    	while(a[0]>0&&c[c[0]]==0)
    	c[0]--;
    	return;
    }
    int main(){
    	memset(a,0,sizeof(a));
    	memset(b,0,sizeof(b));
    	memset(c,0,sizeof(c));
    	init(a);
    	init(b);
    	if(compare(a,b)==-1)
    	cout<<0<<endl;
    	chugao(a,b,c);
    	print(c);
    	print(a);
     	return 0;
    }
    

    点个赞吧

    • 3
      @ 2025-3-25 20:46:33

      超短、简洁

      注释版:

      #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-- ){//c为商,d为余数 
      		while(pd ( i , lb ) ){
      			for(int j=0 ; j < lb ; j++ ){
      				d[i + j]-=b[j];
      				if(d[i + j]<0){    //d的退位 
      					d[i + j + 1]--;
      					d[i + j] += 10;
      				}
      			}
      			c[i]++;
      			for(int j = i ; j < 350 && c[j] >= 10 ; j++){//c的进位 
      				c[j + 1] += c[j] / 10;
      				c[j]%=10;
      			}
      		}
      	}
      }
      
      int main(){
      	cin>>x>>y;
      	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;//f判断当前为是否为前导 
      	for(int i = 349 ; i >= 0 ; i--){
      		if(c[i] != 0 || f){
      			f=true;
      			cout<<c[i];
      		}
      	}
      	if(!f){//如果全为0不会输出 
      		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;
      }
      

      压行版:

      #include<bits/stdc++.h>
      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(){
          std::cin>>x>>y;
          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||i==0)f=true,std::cout<<c[i];
          f=false;
          for(int i=349;i>=0;i--)if(d[i]!=0||f||i==0)f=true,std::cout<<d[i];
          return 0;
      }
      

      ppp版:

      #include<bits/stdc++.h>
      using namespace std;
      string x,y;
      int pppp[350],c[350],ppp[350],la,lb;
      bool pd(int last, int len){
          for(int p=last+len;p<350;p++)if(ppp[p]!=0)return true;
          for(int p=len-1;p>=0;p--){
              if(ppp[last+p]>pppp[p])return true;
              if(ppp[last+p]<pppp[p])return false;
          }
          return true;
      }
      void div(){
          for(int p=la-lb;p>=0;p--)while(pd(p,lb)){
              for(int pp=0;pp<lb;pp++){
                  ppp[p+pp]-=pppp[pp];
                  if(ppp[p+pp]<0)ppp[p+pp+1]--,ppp[p+pp]+=10;
              }
              c[p]++;
              for(int pp=p;pp<350&&c[pp]>=10;pp++)c[pp+1]+=c[pp]/10,c[pp]%=10;
          }
      }
      int main() {
          cin>>x>>y;
          la=x.size(),lb=y.size();
          for(int p=0;p<la;++p)ppp[la-p-1]=x[p]-'0';
          for(int p=0;p<lb;++p)pppp[lb-p-1]=y[p]-'0';
          div();
          bool f=false;
          for(int p=349;p>=0;p--)if(c[p]!=0||f)f=true,cout<<c[p];
          if(!f)cout<<0;
          cout<<endl;
          f=false;
          for(int p=349;p>=0;p--)if(ppp[p]!=0||f)f=true,cout<<ppp[p];
          if(!f)cout<<0;
          return 0;
      }
      

      知道我加注释/改错有多累吗,还不快快点赞!!!

      • -2
        @ 2023-10-5 16:48:50

        一本通的标准答案

        #include #include #include using namespace std; int a[301],b[301],c[301],d;

        void init(int a[]) { string s; cin >> s; a[0]=s.length(); for(int i=1;i<=a[0];i++) { a[i]=s[a[0]-i]-'0'; } }

        void print(int a[]) { int i; if(a[0]==0) { cout<<0<<endl; return; } for(int i=a[0];i>0;i--) { cout << a[i]; } cout <<endl; return; }

        int compare(int a[],int b[]) { if(a[0]>b[0]){ return 1; } if(a[0]<b[0]){ return -1; } for(int i=a[0];i>0;i--) { if(a[i]>b[i]) return 1; if(a[i]<b[i]) return-1; } return 0; }

        void jian(int a[],int b[]) { int flag; flag=compare(a,b); if(flag0){ a[0]=0; return; } if (flag1) { for(int i=1;i<=a[0];i++) { if(a[i]<b[i]){ a[i+1]--; a[i]+=10; } a[i]-=b[i]; } while(a[0]>0 && a[a[0]]==0){ a[0]--; } return; } }

        void numcpy(int p[],int q[],int det) { for(int i=1;i<=p[0];i++){ q[i+det-1]=p[i]; } q[0]=p[0]+det-1; }

        void chugao(int a[],int b[],int c[]) { int i,tmp[101]; c[0]=a[0]-b[0]+1; for(i=c[0];i>0;i--){ memset(tmp,0,sizeof(tmp)); numcpy(b,tmp,i); while(compare(a,tmp)>=0) { c[i]++;jian(a,tmp); } } while(c[0]>0 && c[c[0]]==0) { c[0]--; } return; }

        int main(){ memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); memset(c,0,sizeof(c)); init(a); init(b); chugao(a,b,c); print(c); print(a); return 0; }

        • @ 2025-3-25 18:49:45
          #include #include #include 
          using namespace std; 
          int a[301],b[301],c[301],d;
          
          void init(int a[]) {
          	string s;
          	cin >> s;
          	a[0]=s.length();
          	for(int i=1; i<=a[0]; i++) {
          		a[i]=s[a[0]-i]-'0';
          	}
          }
          
          void print(int a[]) {
          	int i;
          	if(a[0]==0) {
          		cout<<0<<endl;
          		return;
          	}
          	for(int i=a[0]; i>0; i--) {
          		cout << a[i];
          	}
          	cout <<endl;
          	return;
          }
          
          int compare(int a[],int b[]) {
          	if(a[0]>b[0]) {
          		return 1;
          	}
          	if(a[0]<b[0]) {
          		return -1;
          	}
          	for(int i=a[0]; i>0; i--) {
          		if(a[i]>b[i]) return 1;
          		if(a[i]<b[i]) return-1;
          	}
          	return 0;
          }
          
          void jian(int a[],int b[]) {
          	int flag;
          	flag=compare(a,b);
          	if(flag0) {
          		a[0]=0;
          		return;
          	}
          	if (flag1) {
          		for(int i=1; i<=a[0]; i++) {
          			if(a[i]<b[i]) {
          				a[i+1]--;
          				a[i]+=10;
          			}
          			a[i]-=b[i];
          		}
          		while(a[0]>0 && a[a[0]]==0) {
          			a[0]--;
          		}
          		return;
          	}
          }
          
          void numcpy(int p[],int q[],int det) {
          	for(int i=1; i<=p[0]; i++) {
          		q[i+det-1]=p[i];
          	}
          	q[0]=p[0]+det-1;
          }
          
          void chugao(int a[],int b[],int c[]) {
          	int i,tmp[101];
          	c[0]=a[0]-b[0]+1;
          	for(i=c[0]; i>0; i--) {
          		memset(tmp,0,sizeof(tmp));
          		numcpy(b,tmp,i);
          		while(compare(a,tmp)>=0) {
          			c[i]++;
          			jian(a,tmp);
          		}
          	}
          	while(c[0]>0 && c[c[0]]==0) {
          		c[0]--;
          	}
          	return;
          }
          
          int main() {
          	memset(a,0,sizeof(a));
          	memset(b,0,sizeof(b));
          	memset(c,0,sizeof(c));
          	init(a);
          	init(b);
          	chugao(a,b,c);
          	print(c);
          	print(a);
          	return 0;
          }
          
      • 1

      Information

      ID
      793
      Time
      1000ms
      Memory
      256MiB
      Difficulty
      5
      Tags
      # Submissions
      66
      Accepted
      27
      Uploaded By