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);
}