f360 - Shady的複製品
題目描述
題目要求將輸入的數字字串 n 減 1,並輸出減 1 後的結果。由於 n 可能非常大,以字串形式輸入,需要模擬減法運算。
解題思路
這題的核心是模擬大數減法。由於輸入是字串,我們需要從最低位開始,逐位進行減法運算。如果某一位減 1 後變為負數,則向高一位借位。這個過程類似於手動計算減法。程式碼首先將字串轉換為整數陣列,然後從最低位開始模擬減法,處理借位情況。最後,將結果陣列轉換回字串並輸出。需要注意處理前導零的情況,例如輸入為 "100" 時,減 1 後應輸出 "99",而不是 "099"。
複雜度分析
- 時間複雜度: O(N),其中 N 是輸入字串的長度。因為需要遍歷字串的每一位進行減法運算。
- 空間複雜度: O(N),因為需要使用一個大小為 N 的陣列來儲存數字字串。
程式碼
#include <iostream>
using namespace std;
int a[10001];
string s;
int main(){
cin.tie(0); ios::sync_with_stdio(false);
while(cin >> s){
int sl=s.length(),it=sl-1;
for(int i=0;i<sl;++i){
a[i]=s[i]-'0';
}
a[it]--;
while(a[it]<0){
a[it-1]--;
a[it]+=10;
--it;
}
for(int i=(a[0]==0?1:0);i<sl;++i){
cout << a[i];
}
cout << "\n";
}
}