题意:
给定一串数字,和T步,问每次四舍五入可以得到的最大值是多少。
注意:
四舍五入的时候判断前一个的进位,以及后面需要舍去,如果数字.00的形式舍去小数点。
思路:
纯模拟,找5往前推
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <math.h>
#include <iostream>
using namespace std;
char a[200010];
int main(){
int n,t;
cin>>n>>t;
if(t>n)
t=n;
getchar();
gets(a);
int flag;
for(int i=0;i<n;i++)
{
if(a[i]=='.')
{
flag=i;
break;
}
}
int temp=n-1,x=0;
for(int i=flag+1;i<n;)
{
if(a[i]>='5')
{
t--;
if(i==flag+1)
a[i-2]++;
else
a[i-1]++;
temp=i-1;
x=1;
break;
}
else
i++;
}
if(x)
{
while(a[temp]!='.')
{
if(t==0)
break;
if(a[temp]>='5')
{
if(a[temp-1]!='.')
a[temp-1]++;
else
a[temp-2]++;
temp--;
t--;
}
else
break;
}
}
/*
9 3
23999.448
*/
for(int i=temp;i>=0;i--)
{
if(a[i]=='.')
continue;
if(a[i]>'9')
{
a[i]='0';
if(i==0)
{
printf("1");
}
if(a[i-1]!='.')
a[i-1]++;
else
a[i-2]++;
}
}
for(int i=0;i<=temp;i++)
{
if((i==temp)&&a[i]=='.')
continue;
printf("%c",a[i]);
}
return 0;
}