b982 - Error
題目描述
題目要求將輸入字串解析,並根據字串中包含的單位 (g, m, k, b, by) 計算出一個總和。字串中包含數字和單位,需要正確提取數字並轉換為對應的數值。
解題思路
這題主要是一個字串解析的題目。程式碼透過迴圈迭代輸入字串,判斷每個字元是數字、小數點還是單位。如果是數字,則將其轉換為整數並累加到 buf 變數中。如果是單位,則根據不同的單位將 buf 和 buf2 轉換為對應的數值,並加到 ans 變數中。buf2 用於處理小數部分。程式碼需要處理多種單位,例如 'g', 'm', 'k', 'b', 'by',並根據單位進行不同的計算。
複雜度分析
- 時間複雜度: O(n),其中 n 是輸入字串的長度。因為程式碼需要遍歷整個輸入字串一次。
- 空間複雜度: O(1),因為程式碼只使用了幾個整數變數來儲存中間結果,空間使用量不隨輸入字串的長度而變化。
程式碼
#include <iostream>
using namespace std;
string a;
int main(){
cin.tie(0); ios::sync_with_stdio(false);
while(cin >> a){
long long int al=a.length(),ans=0,buf=0,buf2=0;
for(int i=0;i<al;++i){
if(a[i]>='0'&&a[i]<='9'){
buf *= 10;
buf += a[i]-'0';
}
else if(a[i]!='.'){
if(a[i]=='g')
ans += buf * 8000000000;
else if(a[i]=='m')
ans += buf * 8000000;
else if(a[i]=='k')
ans += buf * 8000 + buf2 * 800;
else if(a[i]=='b'){
if(a[i+1]=='y'){
++i;
buf *= 8;
}
i+=2;
ans += buf + buf2;
}
if(a[i+1]=='b')++i;
buf = buf2 = 0;
}
else buf2 += a[++i]-'0';
}
cout << ans << "\n";
}
}