5 条题解

  • 1
    @ 2023-8-20 11:12:55
    #include<bits/stdc++.h> 
    using namespace std;
    char a1[9999],b1[9999],c1[9999];//用字符数组保存 
    int a[9999],b[9999],c[9999];//用于计算的整形数组,a、b为字符数组逆序转换而来,c为最终的答案 
    int main(){
    	cin>>a1>>b1;//输入数据 
    	int la=strlen(a1),lb=strlen(b1);//计算字符数组长度 
    	if((la<lb)||(la==lb&&strcmp(a1,b1)<0)){//判断大小 
    		cout<<"-";
    		strcpy(c1,a1);
    		strcpy(a1,b1);
    		strcpy(b1,c1);//交换 
    	}
    	la=strlen(a1);
    	lb=strlen(b1);//重新定义长度 
    	for(int i=0;i<la;i++) a[la-i]=a1[i]-'0';//逆序保存 
    	for(int i=0;i<lb;i++) b[lb-i]=b1[i]-'0';//注意,这里数组的长度为1-la/lb 
    	int lc=1;//表示计算的位置 
    	while(lc<=la||lc<=lb){//相减及处理借位 
    		if(a[lc]<b[lc]){//如果不够减 
    			a[lc]+=10;
    			a[lc+1]--;//向上一位借1 
    		}
    		c[lc]=a[lc]-b[lc];
    		lc++;
    	}
    	while(c[lc]==0&&lc>1) lc--;//去掉前面多余的0,本身是0就保存 
    	for(int i=lc;i>=1;i--) cout<<c[i];//打印 
    	return 0;
    }
    
    • 1
      @ 2023-8-20 11:12:51
      #include<bits/stdc++.h>
      using namespace std;
      char a1[100000],b1[100000];//用来保存两个加数	
      int a[1000],b[1000],c[1000];//用于计算的整型数组
      //a,b为字符数组逆序转换而来,c为最后的结果 
      int main(){
      	cin>>a1>>b1;//输入数据 
      	int la=strlen(a1),lb=strlen(b1);//记录a1和b1的长度 
      	//如果a比b小,那么就先输出一个负号,同时交换a1和b1的值 
      	if(la<lb||(la==lb&&strcmp(a1,b1)<0)){//如果a1的长度小于b1,或者2个长度一样时,strcmp函数比较起来a1要小 
      		cout<<"-";//输出负号 
      		char c1[100000];
      		strcpy(c1,a1);
      		strcpy(a1,b1);
      		strcpy(b1,c1);//交换a1和a2 
      	}
      	la=strlen(a1),lb=strlen(b1);
      	for(int i=0;i<la;i++) a[la-i]=a1[i]-'0';//逆序保存 
      	for(int i=0;i<lb;i++) b[lb-i]=b1[i]-'0';//注意:这里整形数组的长度是从1到lb 
      	int lc=1;//表示计算的位置
      	while(lc<=la||lc<=lb){//相减 
      		if(a[lc]<b[lc]){//如果不够减
      		a[lc]+=10;
      		a[lc+1]--;//向上一位借1 
      		}
      		c[lc]=a[lc]-b[lc];
      		lc++;
      	} 
      	while(c[lc]==0&&lc>1) lc--;//去掉最前面的0,如果本身就是0则保留一个0 
      	for(int i=lc;i>=1;i--) cout<<c[i];//输出答案 
      	return 0;
      }
      
      • 0
        @ 2023-8-20 11:22:55
        using namespace std;
        int a[1000],b[1000],c[1000];//用于计算的整型数组
        char a1[100000],b1[100000];//用来保存两个减数
        //a,b为字符数组逆序转换而来,c为最后的结果 
        int main(){
        	cin>>a1>>b1;//输入数据 
        	int la=strlen(a1);//记录a1的长度 
        	int lb=strlen(b1);//记录b1的长度 
        	//如果a比b小,那么就先输出一个负号,同时交换a1和b1的值 
        	if(la<lb||(la==lb&&strcmp(a1,b1)<0)){//如果a1的长度小于b1,或者2个长度一样时,strcmp函数比较起来a1要小 
        		cout<<"-";//输出负号 
        		char c1[100000];
        		strcpy(c1,a1);
        		strcpy(a1,b1);
        		strcpy(b1,c1);//交换a1和a2 
        	}
        	la=strlen(a1);
        	lb=strlen(b1);//不要忘记重新计算一次长度 
        	for(int i=0;i<la;i++) a[la-i]=a1[i]-'0';//逆序保存 
        	for(int i=0;i<lb;i++) b[lb-i]=b1[i]-'0';//注意:这里整形数组的长度是从1到lb 
        	int lc=1;//c数组用来计算结果,lc表示从第一位开始计算 
        	while(lc<=la||lc<=lb){//两个减数相减 
        		if(a[lc]<b[lc]){//如果不够减
        		a[lc]+=10;
        		a[lc+1]--;//向上一位借1 
        		}
        		c[lc]=a[lc]-b[lc];
        		lc++;
        	} 
        	while(c[lc]==0&&lc>1) lc--;//去掉前面多余的0
        	for(int i=lc;i>=1;i--) cout<<c[i];//因为是逆序存放的数组,所以逆序输出答案 
        	return 0;
        }
        
        • 0
          @ 2023-3-19 10:58:45

          #include<bits/stdc++.h> using namespace std; char A[10001],B[10001],D[10001]; int a[10001],b[10001],c[100001]; int main() { cin>>A>>B; int lena=strlen(A); int lenb=strlen(B); if(lenb>lena||lena==lenb&&strcmp(A,B)<0) { strcpy(D,A); strcpy(A,B); strcpy(B,D); cout<<"-"; swap(lena,lenb); } int x=0; int lenc; for(int i=0;i<=lena-1;i++) { a[i]=A[lena-1-i]-'0'; } for(int i=0;i<=lenb-1;i++) { b[i]=B[lenb-1-i]-'0'; } int i; for(i=0;i<lena;i++) { x=a[i]<b[i]; a[i]+=10*x; a[i+1]-=x; c[i]=a[i]-b[i]; } lenc=i; while(c[lenc]==0&&lenc>0) { lenc--; } for(i=lenc;i>=0;i--) { cout<<c[i]; } return 0; }

          • 0
            @ 2023-3-4 11:29:27
            #include<bits/stdc++.h>
            using namespace std;
            char A[10001],B[10001],D[10001];
            int a[10001],b[10001],c[100001];
            int main(){
            cin>>A>>B;
            int lena=strlen(A);
            int lenb=strlen(B);
            if(lenb>lena||lena==lenb&&strcmp(A,B)<0){
            strcpy(D,A);
            strcpy(A,B);
            strcpy(B,D);
            cout<<"-";
            swap(lena,lenb);
            }
            int x=0;
            int lenc;
            for(int i=0;i<=lena-1;i++){
            a[i]=A[lena-1-i]-'0';
            }
            for(int i=0;i<=lenb-1;i++){
            b[i]=B[lenb-1-i]-'0';
            }
            int i;
            for(i=0;i<lena;i++){
            x=a[i]<b[i];
            a[i]+=10*x;
            a[i+1]-=x;
            c[i]=a[i]-b[i];
            }
            lenc=i;
            while(c[lenc]==0&&lenc>0){
            lenc--;
            }
            for(i=lenc;i>=0;i--){
            cout<<c[i];
            }
            return 0;
            }
            
            • 1

            信息

            ID
            268
            时间
            1000ms
            内存
            16MiB
            难度
            6
            标签
            递交数
            220
            已通过
            61
            上传者