1 条题解

  • 0
    @ 2023-6-11 12:20:59

    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
    2669
    时间
    1000ms
    内存
    128MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者