1 条题解
-
0
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
- 上传者