#20484: 使用string字串避開浮點數計算


tommy123234345456567@gmail.com (星雨)

學校 : 國立內壢高級中學
編號 : 111941
來源 : [116.241.253.53]
最後登入時間 :
2023-01-26 21:21:44
d140. On Sale -- 章魚教學網站-97學年度程設馬拉松賽 | From: [1.171.87.92] | 發表日期 : 2020-01-30 05:06

資測了快200次總算過了-w-

這裡我想分享一下我用的方式

輸入string字串 

因為小數固定兩位 所以我考慮把數字的後三位做些調整

string money;
while(cin >> money)
{
long long int len=money.length();
money[len-3]=money[len-2];
money[len-2]=money[len-1];
money[len-1]='0';
}
接著就是想辦法換成int來進行計算
首先還需要一個函數庫
#include <cstdlib>
接著打上
long long int Amoney=atoi(money.c_str());
這裡的Amoney是我拿來儲存int的金錢 atoi是string轉int的東西 可以去自行查詢怎麼用
前面打了一行
money[len-1]='0';
是因為 這樣子所有數字最後都有0 在做折扣時不會用到浮點數
經過判斷後 為了避免輸出小數又會被浮點數的不精密計算搞死 選擇把int換回string
這時需要另一個函數庫
#include <sstream>
用法如下
stringstream a;
a<<Amoney;
a>>money;
a是暫存變數
詳細用法同樣可以上網查詢
喚回string後 再把小數點移回來
money[len-1]=money[len-2];
money[len-2]=money[len-3];
money[len-3]='.';
題目要求無條件捨去小數以下二位之後的 所以最後一個數就是小數第三位 可以直接覆蓋掉
cout << "$" << money << endl;
接著這樣就可以了
PS:我在做的時候 在+8元那邊卡了一會 如果跟我一樣的話 稍微思考一下怎麼改比較好
如果哪裡打得有誤 也請幫忙指正 謝謝QwQ
 
 
#23206: Re:使用string字串避開浮點數計算


snakeneedy (蛇~Snake)

學校 : 國立高雄師範大學附屬高級中學
編號 : 7661
來源 : [114.40.8.251]
最後登入時間 :
2023-01-25 19:16:06
d140. On Sale -- 章魚教學網站-97學年度程設馬拉松賽 | From: [218.161.41.139] | 發表日期 : 2020-10-29 15:23

輸入可以考慮試試看

int n, f;
char dot;
while (cin >> n >> dot >> f) {
  // TODO
}
 
#24100: Re:使用string字串避開浮點數計算


allllllan123456 (God of Computer Science)

學校 : 國立臺灣大學
編號 : 13732
來源 : [140.109.20.138]
最後登入時間 :
2021-07-08 17:41:52
d140. On Sale -- 章魚教學網站-97學年度程設馬拉松賽 | From: [123.194.139.84] | 發表日期 : 2021-01-18 21:19

輸入可以考慮試試看

int n, f;
char dot;
while (cin >> n >> dot >> f) {
  // TODO
}


先同乘以 100 忽略掉小數點,等運算完畢之後再除以 100 還原回來。

 
ZeroJudge Forum