作业帮 > 综合 > 作业

关于C语言利用模拟笔算来进行分数化小数的四舍五入问题

来源:学生作业帮 编辑:灵鹊做题网作业帮 分类:综合作业 时间:2024/04/29 01:47:34
关于C语言利用模拟笔算来进行分数化小数的四舍五入问题
一道分数化小数的题目,要求将形如a/b的分数保留小数点后c位.直接1.0*a/b是不精确的.但是在利用笔算进行模拟时,四舍五入好像成了问题,我指的是该位是9,按四舍五入应该变成0并向前面进1.下面贴出来代码
#include
#include
int main()
{
\x09int a,b,c,cnt=0;
\x09scanf("%d %d %d",&a,&b,&c);
\x09if (b!=0&&c>0&&a
关于C语言利用模拟笔算来进行分数化小数的四舍五入问题
看来这需要用数组来解决了,不然没有办法解决已输出的数据
再问: 我也觉得是。。。这种算法弊端就在于没办法回头去改数据。但是用数组的话又太麻烦
再答: #include <stdio.h>

int main()
{
\x09int a,b,c,cnt=0;
\x09int arr[101];
\x09scanf("%d %d %d",&a,&b,&c);
\x09if (b!=0&&c>0&&a<=1000000&&b<=1000000&&c<=100){
\x09\x09arr[0]=a/b;
\x09\x09for(cnt=1;cnt<=c;cnt++){
\x09\x09\x09a=(a%b)*10;
\x09\x09\x09arr[cnt]=a/b;
\x09\x09}
\x09\x09a=(a%b)*10;
\x09\x09if(a/b>4)
\x09\x09{
\x09\x09\x09while( 1 )
\x09\x09\x09{
\x09\x09\x09\x09cnt--;
\x09\x09\x09\x09arr[cnt] += 1 ;
\x09\x09\x09\x09if ( cnt==0 || arr[cnt] < 10 )
\x09\x09\x09\x09\x09break;
\x09\x09\x09\x09arr[cnt] -= 10 ;
\x09\x09\x09}
\x09\x09}

\x09\x09printf("%d.", arr[0] );
\x09\x09for( cnt=1;cnt<=c;cnt++ )
\x09\x09{
\x09\x09\x09printf("%d", arr[cnt]);
\x09\x09}
\x09\x09printf("\n");
\x09}
    return 0;
}