我需要帮助!(悬关)

P2142 高精度减法

@[yinzifan](/user/996790) 把 ```cpp for(int i=0;i<la;i++){ a[i]=s1[la-i]-'0'; } for(int i=0;i<lb;i++){ a[i]=s1[la-i]-'0'; } ``` 改成 ```cpp for(int i=1;i<=la;i++){ a[i]=s1[la-i]-'0'; } for(int i=1;i<=lb;i++){ b[i]=s2[lb-i]-'0'; } ```
by __PRO__ @ 2024-01-29 09:25:37


还是错。。。
by yinzifan @ 2024-01-29 09:28:47


@[yinzifan](/user/996790) 这样就行了 ``` c++ #include<iostream> #include<string> #include<cstdio> using namespace std; string s1,s2; int a[10100],b[10100],la,lb,lc; int main(){ cin>>s1>>s2; la=s1.size(); lb=s2.size(); if(la<lb||(la==lb&&s1<s2)){ swap(s1,s2); swap(la,lb); // string s3; // s3=s1; // s1=s2; // s2=s3; // lc=la; // la=lb; // lb=lc; cout<<"-"; } else if(s1==s2){ cout<<0; return 0; } for(int i=0;i<la;i++){ a[i]=s1[la-i-1]-'0'; // cout<<a[i]; } for(int i=0;i<lb;i++){ b[i]=s2[lb-i-1]-'0'; } for(int i=0;i<=la;i++){ if(a[i]<b[i]){ a[i+1]--; a[i]+=10; } a[i]=a[i]-b[i]; } while(a[la]==0&&la>0){ la--; } // cout<<la<<endl; for(int i=la;i>=0;i--){ cout<<a[i]; } return 0; } ```
by pigeonteam @ 2024-01-29 10:03:19


你在创建高精度数组的时候用 $0$ 为初始下标,但计算的时候用 $1$ 为初始下标了。
by pigeonteam @ 2024-01-29 10:04:46


@[pigeonteam](/user/1042306) thank you
by yinzifan @ 2024-01-29 10:09:57


|