竞赛讨论区 > 66.7%正确数据,求大神解答
头像
天才制杖
发布于 2023-07-04 00:13
+ 关注

66.7%正确数据,求大神解答

#include<stdio.h>

#include<stdlib.h>

int is9(char a[],int i)

{

//整数部分进1

if(i<0)

{

putchar('1');return 0;

}

//小数部分进1

if(a[i]=='9')

{

a[i]='0';i--;

return is9(a,i);

}

a[i]++;

return 0;

}

int add(char a[],int i,int* t)

{

//四舍五入次数归零,结束

if(*t==0)

{

return 0;

}

//消耗一次四舍五入的次数

(*t)--;

//情况1:小数点后一位即满足条件,对整数部分进一位

if(a[i]=='.')

{

a[i]=0;

i--;

return is9(a,i);

}

//对小数部分归零

a[i]++;

a[i+1]=0;

if(a[i]>'4')

{

i--;

return add(a,i,t);

}

return 1;

}

int main()

{

//n,t分别表示小数(含小数点)的长度以及四舍五入的次数。

int n,t;

scanf("%d %d",&n,&t);

//a[n+1]字符串表示qdgg的初始分数。

char a[n+1];

scanf("%s",a);

//遍历分数的整数部分长度

int i;

for(i=0;a[i]!='.';i++);

//从分数的小数部分开始遍历,依次后推

int j;

for(j=i+1;a[j];j++)

{

//四舍五入次数为零,退出四舍五入

if(t==0)

{

break;

}

//当遍历小数部分满足条件时,四舍五入

if(a[j]>'4')

{

//构造一个子函数进行四舍五入,&t修改t的值

add(a,j-1,&t);

break;

}

}

printf("%s",a);

}

全部评论

(1) 回帖
加载中...
话题 回帖

本文相关内容

等你来战

查看全部

热门推荐