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

更新于:2022年4月7日

127 次浏览

开启你的职业生涯

完成课程获得认证

开始学习
广告