大佬帮忙看看……

P2142 高精度减法

[P2142WA数据](https://www.luogu.org/blog/1124219467lq/p2142wa-shuo-ju)
by lin_god @ 2019-02-02 15:57:34


你没有判断当m==n的时候a<b的情况 所以你的程序输入102 103会输出999
by 花园Serena @ 2019-02-02 16:30:38


@[Llinqi麒](/space/show?uid=102390)
by 花园Serena @ 2019-02-02 16:32:19


加一个这个就行了 ``` else if(n==m){ long long i=0; while(x[i]>=y[i]&&i<n) i++; if(i!=n){ f=true; for(i=0; i<m; i++) swap(x[i],y[i]); } } ```
by 花园Serena @ 2019-02-02 16:38:00


谢谢大佬
by lin_god @ 2019-02-04 11:14:41


可是好像还是不行啊 是这样改的吗 ```cpp #include<bits/stdc++.h> using namespace std; char a[100100],b[100100]; long long x[100100],y[100100],v[100100]; int main() { cin>>a>>b; long long n,m; bool f=false,l=false; n=strlen(a); m=strlen(b); for(long long i=0; i<n/2; i++) swap(a[i],a[n-1-i]); for(long long i=0; i<m/2; i++) swap(b[i],b[m-1-i]); for(long long i=0; i<n; i++) x[i]=a[i]-'0'; for(long long i=0; i<m; i++) y[i]=b[i]-'0'; if(m>n) { for(long long i=0; i<m; i++) swap(x[i],y[i]); f=true; } else if(n>m) swap(n,m); else { long long i=0; while(x[i]>=y[i]&&i<n) i++; if(i!=n) { f=true; for(i=0; i<m; i++) swap(x[i],y[i]); } } for(long long i=0; i<m; i++) v[i]=x[i]-y[i]; for(long long i=0; i<m; i++) if(v[i]<0) { v[i]=10+v[i]; v[i+1]--; } if(f==true) cout<<"-"; for(long long i=m-1; i>=0; i--) { if(l==false) if(v[i]!=0) { l=true; cout<<v[i]; continue; } if(l==true) cout<<v[i]; } return 0; } ```
by lin_god @ 2019-02-04 11:18:31


@[Van♂様年华](/space/show?uid=86973)
by lin_god @ 2019-02-04 11:19:24


@[Llinqi麒](/space/show?uid=102390) 并不是改成else,而是直接加上就好了,好好理解一下吧...当长度相等时前一个数小于后一个数
by 花园Serena @ 2019-02-04 14:05:29


``` #include<bits/stdc++.h> using namespace std; char a[100100],b[100100]; long long x[100100],y[100100],v[100100]; int main() { cin>>a>>b; long long n,m; bool f=false,l=false; n=strlen(a); m=strlen(b); for(long long i=0; i<n/2; i++) swap(a[i],a[n-1-i]); for(long long i=0; i<m/2; i++) swap(b[i],b[m-1-i]); for(long long i=0; i<n; i++) x[i]=a[i]-'0'; for(long long i=0; i<m; i++) y[i]=b[i]-'0'; if(m>n) { for(long long i=0; i<m; i++) swap(x[i],y[i]); f=true; } if(n==m){ long long i=0; while(x[i]>=y[i]&&i<n) i++; if(i!=n){ f=true; for(i=0; i<m; i++) swap(x[i],y[i]); } } if(n>m) swap(n,m); for(long long i=0; i<m; i++) v[i]=x[i]-y[i]; for(long long i=0; i<m; i++) if(v[i]<0) { v[i]=10+v[i]; v[i+1]--; } if(f==true) cout<<"-"; for(long long i=m-1; i>=0; i--) { if(l==false) if(v[i]!=0) { l=true; cout<<v[i]; continue; } if(l==true) cout<<v[i]; } return 0; } ```
by 花园Serena @ 2019-02-04 14:06:53


@[Van♂様年华](/space/show?uid=86973) …… 可是……还是不行啊。 第6个点不行 卡着90分 用你的代码也不行…… 怎么办……
by lin_god @ 2019-02-05 15:29:01


| 下一页