Run ID Author Problem Lang Verdict Score Time Memory Code Length Submit Time
337636 黄浙峰老师 【C6-4】高精度减法2 C++ Accepted 100 7 MS 272 KB 1408 2025-08-04 10:56:22

Tests(4/4):


#include<bits/stdc++.h> using namespace std; int len1,len2,len; int a[1005],b[1005],c[1005]; string s1,s2; bool check(){ if(len1>len2) return 0; if(len1<len2) return 1; for(int i=0; i<len; i++){ if(s1[i]<s2[i]) return 1; if(s1[i]>s2[i]) return 0; } return 0; } void nx(){ for(int i=0; i<len1; i++){ a[len1-i-1]=s1[i]-'0'; } for(int i=0; i<len2; i++){ b[len2-i-1]=s2[i]-'0'; } } void add(){ for(int i=0; i<len; i++){ c[i]=c[i]+a[i]+b[i]; c[i+1]=c[i]/10; c[i]=c[i]%10; } } void sub(){ for(int i=0; i<len; i++){ if(a[i]<b[i]){ a[i+1]--; a[i]=a[i]+10; } c[i]=a[i]-b[i]; } } int main(){ bool z1=1,z2=1; cin>>s1>>s2; if(s1[0]=='-'){ //去掉负号,标记正1负0 z1=0; s1=s1.erase(0,1); } if(s2[0]=='-'){ z2=0; s2=s2.erase(0,1); } len1=s1.size(); len2=s2.size(); len=max(len1,len2); if(z1==0 && z2 || z1&&z2==0){//两个数一正一负,做加法 if(z1==0 && z2) cout<<'-'; //如果a是负数 b是正数 nx(); add(); } if(z1==0 && z2==0 || z1&&z2) {//两个同号,减法 if(z1==0 && z2==0){ //如果两个都是负数,|b|-|a| swap(s1,s2); swap(len1,len2); } if(check()){ //大数减小数 cout<<'-'; swap(s1,s2); swap(len1,len2); } nx(); sub(); } while(c[len]==0 && len!=0) len--; while(len>=0) cout<<c[len--]; return 0; }


Judgement Protocol: