1 条题解

  • 0
    @ 2025-10-10 19:24:12

    C :

    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    char a[1001],b[1001],t[1001],r[1001],tmp[1];
    int x[1001],y[1001],z[1001];
    int main(){
       scanf("%s%s",&a,&b);
       //先比较 
        if(strcmp(a,b)<0){
        	strcpy(t,a);
        	strcpy(a,b);
        	strcpy(b,t);
    	}
    	//把a字符串、b字符串分别放入两个整数数组中
    	int i,alen =strlen(a),blen=strlen(b),n=alen>blen?alen:blen;
    	for(i=0;i<alen;i++) x[i] = a[alen-i-1] - '0';
    	for(i=0;i<blen;i++) y[i] = b[blen-i-1] - '0';
    	for(i=0;i<n;i++){
    		z[i] = x[i] - y[i];
    		if(z[i]<0){
    			z[i] = z[i]+10;
    			x[i+1] = x[i+1] - 1;
    		} 
    	}
    	int k;
    	for(i=n-1;i>=0;i--){
    		if(z[i]!=0){
    			k = i;
    			break;
    		}
    	}
    	long long m = 0;
    	for(i=k;i>=0;i--){
    		m = m*10 + z[i];
    	}
    	if(m==0){
    	 	printf("0");
    		return 0; 
    	} 
    	while(m!=0){
    		if(m%16>=10){
    			tmp[0] = m%16-10+'A';
    			strcat(r,tmp);
    		}else{
    			tmp[0] = m%16+'0';
    			strcat(r,tmp);
    		}
    		m = m/16;
    	}
    	for(i=strlen(r)-1;i>=0;i--) printf("%c",r[i]);
        return 0;
    }
    
    

    C++ :

    #include <bits/stdc++.h>
    using namespace std;
    
    #include <bits/stdc++.h>
    using namespace std;
    
    //高精度减法之后转long long 
    long long fun(string s1,string s2) {
    	long long a[250] = {0},b[250] = {0},c[250] = {0};
    	long long i,len,p = 0,r = 0;
    	//长的一定大,一样长字典码大的一定大
    	//"123" "3"   "123" "125"
    	if(s1.size() < s2.size() || (s1.size() == s2.size() && s1 < s2)) {
    		swap(s1,s2);//直接交换两个变量的值
    	}
    
    	//将s1和s2逆序存入整数数组
    	for(i = 0; i < s1.size(); i++) {
    		a[i] = s1[s1.size() - i - 1] - '0';
    	}
    
    	for(i = 0; i < s2.size(); i++) {
    		b[i] = s2[s2.size() - i - 1] - '0';
    	}
    
    	//逐位相减
    	len = s1.size();
    
    	for(i = 0; i < len; i++) {
    		//如果不够减,向右借1,当10用
    		if(a[i] < b[i]) {
    			a[i + 1] = a[i + 1] - 1;
    			a[i] = a[i] + 10;
    		}
    
    		c[i] = a[i] - b[i];
    	}
    
    	//从右向左逐位输出,从第一个遇到的非0元素开始输出
    	for(i = len - 1; i >= 0; i--) {
    		if(c[i] != 0) {
    			p = i;
    			break;
    		}
    	}
    
    	//逆序从第一个非0元素 输出每一位
    	//123 -> 321
    	long long t = 1;
    	for(i = 0; i <= p; i++) {
    		r = r + t * c[i];
    		t = t * 10;
    	}
    	
    	return r;
    }
    
    //转16进制 
    string jinzhi(long long n){
    	string t = "0123456789ABCDEF";
    	string r = "";
    	
    	if(n == 0) r = "0";
    	while(n != 0){
    		r = t[n%16] + r;
    		n = n / 16;
    	}
    	
    	return r;
    }
    
    int main() {
    	string s1,s2;
    	cin>>s1>>s2;
    	cout<<jinzhi(fun(s1,s2));
    }
    
    
    • 1

    信息

    ID
    652
    时间
    1000ms
    内存
    128MiB
    难度
    10
    标签
    递交数
    3
    已通过
    1
    上传者