C++程式:求舍入數字以拯救王國


假設我們有一個字串S,其中包含一個十進位制實數。有一個名叫阿瑪爾的國王,他的兒子比瑪爾在一個王國裡。還有其他公民。他們幸福地生活著,直到王國遭遇了巨大的麻煩。怪獸在那裡定居下來。這些奇怪的怪獸對王國造成的最大破壞是它們喜歡高精度數字。結果,王國的治療師已經與出售精確0.273549107藥水桶的商人預約了三次。為了以某種方式解決這個問題,阿瑪爾國王釋出了一項命令,要求將所有數字舍入到最接近的整數,以簡化計算。具體命令如下:

  • 如果一個數字的整數部分不以數字9結尾,並且其小數部分嚴格小於0.5,則舍入後的數字與該數字的整數部分一致。

  • 如果一個數字的整數部分不以數字9結尾,並且其小數部分不小於0.5,則透過將1加到該數字整數部分的最後一位數字來獲得舍入後的數字。

  • 如果數字的整數部分以數字9結尾,則報告為“無法進行舍入”。

我們必須實現邏輯以獲得舍入後的數字。

問題類別

為了解決這個問題,我們需要操作字串。程式語言中的字串是儲存在特定陣列型別資料中的字元流。幾種語言將字串指定為特定資料型別(例如Java、C++、Python);而其他幾種語言將字串指定為字元陣列(例如C)。字串在程式設計中非常重要,因為它們通常是各種應用程式中首選的資料型別,並用作輸入和輸出的資料型別。有各種字串操作,例如字串搜尋、子字串生成、字串剝離操作、字串轉換操作、字串替換操作、字串反轉操作等等。檢視下面的連結,瞭解如何在C/C++中使用字串。

https://tutorialspoint.tw/cplusplus/cpp_strings.htm

https://tutorialspoint.tw/cprogramming/c_strings.htm

因此,如果我們問題的輸入類似於S = "3.14159",則輸出將為3

步驟

為了解決這個問題,我們將遵循以下步驟:

ret := a blank string
p := position of '.' in S
if S[p - 1] is same as '9', then:
   return "Not Possible"
Otherwise
   ret := ret concatenate (substring of S from index 0 to p-1) if S[p+1] < '5', otherwise (substring of S from index 0 to p-2) concatenate (S[p - 1] + 1)
return ret

示例

讓我們看看下面的實現以更好地理解:

#include <bits/stdc++.h>
using namespace std;
string solve(string S){
   string ret = "";
   int p = S.find('.');
   if (S[p - 1] == '9')
      return "Not Possible";
   else
      ret += (S[p + 1] < '5' ? S.substr(0, p) : S.substr(0, p - 1) + string(1, (S[p - 1] + 1)));
      return ret;
}
int main(){
   string S = "3.14159";
   cout << solve(S) << endl;
}

輸入

"3.14159"

輸出

3

更新於:2022年4月7日

127 次瀏覽

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.