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