C++程序:求舍入数字以拯救王国
假设我们有一个字符串S,其中包含一个十进制实数。有一个名叫阿玛尔的国王,他的儿子比玛尔在一个王国里。还有其他公民。他们幸福地生活着,直到王国遭遇了巨大的麻烦。怪兽在那里定居下来。这些奇怪的怪兽对王国造成的最大破坏是它们喜欢高精度数字。结果,王国的治疗师已经与出售精确0.273549107药水桶的商人预约了三次。为了以某种方式解决这个问题,阿玛尔国王发布了一项命令,要求将所有数字舍入到最接近的整数,以简化计算。具体命令如下:
如果一个数字的整数部分不以数字9结尾,并且其小数部分严格小于0.5,则舍入后的数字与该数字的整数部分一致。
如果一个数字的整数部分不以数字9结尾,并且其小数部分不小于0.5,则通过将1加到该数字整数部分的最后一位数字来获得舍入后的数字。
如果数字的整数部分以数字9结尾,则报告为“无法进行舍入”。
我们必须实现逻辑以获得舍入后的数字。
问题类别
为了解决这个问题,我们需要操作字符串。编程语言中的字符串是存储在特定数组类型数据中的字符流。几种语言将字符串指定为特定数据类型(例如Java、C++、Python);而其他几种语言将字符串指定为字符数组(例如C)。字符串在编程中非常重要,因为它们通常是各种应用程序中首选的数据类型,并用作输入和输出的数据类型。有各种字符串操作,例如字符串搜索、子字符串生成、字符串剥离操作、字符串转换操作、字符串替换操作、字符串反转操作等等。查看下面的链接,了解如何在C/C++中使用字符串。
https://tutorialspoint.com/cplusplus/cpp_strings.htm
https://tutorialspoint.com/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