列表

详情


NC200369. 四舍五入

描述

四舍五入是个好东西。比如你只考了45分,四舍五入后你是50分再四舍五入你就是满分啦!qdgg刚考完拓扑。成绩十分不理想。但老师觉得他每天都很认真的听课很不容易。于是决定给他一个提高成绩的机会:让他的成绩可以在小数点后的任意位置四舍五入(也可以四舍五入为最接近的整数)。
但是这是有限制的。qdgg只能四舍五入t次。请帮助qdgg找到他在不超过t次四舍五入可获得的最高成绩。请注意,他可以选择不使用全部t次机会。此外,他甚至可以选择完全不对成绩进行四舍五入。
在这个问题中,使用经典的舍入规则:将数字四舍五入到第n个数字时,必须先看一下数字n + 1,如果小于5,则第n个数字将保持不变,而所有后续数字替换为0。否则,如果n + 1位数大于或等于5,则位置n处的位数将增加1(如果此位数等于9,这也可能会更改其他一些位数),并且随后的所有位数数字将替换为0。最后,所有尾随的零将被丢弃。
例如,如果将数字1.14舍入到小数点后第一位,则结果为1.1,而如果将1.5舍入到最接近的整数,则结果为2。四舍五入到小数点后第五位的数字1.299996121将得出数字1.3。

输入描述

输入的第一行包含两个整数n和t()表示小数(含小数点)的长度以及四舍五入的次数。

第二行为一个字符串表示qdgg的初始分数。

输出描述

一行表示qdgg能得到的最高分数(请勿输出尾零)

示例1

输入:

6 1
10.245

输出:

10.25

示例2

输入:

6 2
10.245

输出:

10.3

说明:

注意10.30被认为是错的

示例3

输入:

3 100
9.2

输出:

9.2

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

Python3 解法, 执行用时: 46ms, 内存消耗: 7560K, 提交时间: 2023-03-31 10:17:14

n, t = map(int, input().split())
a = input()
try:
    a1,a2 = a.split('.')
    l = len(a1)
    a1 = int(a1)
    f = False
    while t:
        if a2[0] >='5':
            a1 +=1
            f = True
            break
        for i in range(len(a2)):
            if int(a2[i] )>= 5:
                a2 = a2[:i-1]+str(int(a2[i-1])+1)
                t -= 1
                break
        else:
            break
    if f:
        print(a1)
    else:
        print(str(a1)+'.'+a2)
except:
        print(a)

C++(clang++ 11.0.1) 解法, 执行用时: 3ms, 内存消耗: 472K, 提交时间: 2023-05-13 09:25:35

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int n,t;
	string a;
	cin>>n>>t>>a;
	int x=a.find('.');
	if(x==-1)
	{
		cout<<a;
		return 0;
	}
	for(int i=x+1;i<a.size();i++)
	{
		if(a[i]>='5')
		{
			a.erase(i);
			i--,t--;
			while(a[i]=='4'&&t)
			{
				a.erase(i);
				i--,t--;
			}
			if(a[i]=='.')
			{
				a.erase(i);
				i--;
				while(a[i]=='9')
				{
					a[i]='0';
					i--;
				}
				if(i==-1) cout<<1;
				else a[i]++;
			}
			else a[i]++;
		}
	}
	cout<<a;
} 

C++(g++ 7.5.0) 解法, 执行用时: 3ms, 内存消耗: 432K, 提交时间: 2023-01-16 01:11:18

#include<bits/stdc++.h>
using namespace std;
int main(){
	string a;
	int n,t,p;
	cin>>n>>t>>a;
	p=a.find('.');
	if(p==-1){
		cout<<a;return 0;
	}
	for(int i=p+1;i<a.size();i++){
		if(a[i]>='5'){
			a.erase(i);i--;t--;
			while(a[i]=='4'&&t){
				a.erase(i);i--;t--;
			}
			if(a[i]=='.'){
				a.erase(i);i--;
				while(a[i]=='9'){
					a[i]='0';i--;
				}
				if(i==-1)cout<<1;
				else a[i]++;
			}
			else a[i]++;
		}
	}
	cout<<a;
	return 0;
}

上一题