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
資料結構
網路
RDBMS
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP