高精度除法


输入正整数a,b,c,输出a/b的小数形式,精确到小数后c位。(提示:使用循环)

#include<bits/stdc++.h>
using namespace std;
#define MAX_LEN 100
char ans[MAX_LEN+10];
int main()
{
    memset(ans,0,sizeof(ans));
    int a,b,c;
    int anslen;

    cin>>a>>b>>c;


    sprintf(ans,"%d.",a/b);//打印整数部分及小数点
    ans[MAX_LEN+8]=anslen=strlen(ans);
    a%=b;
    for (int i=0; i<c; i++)
    {


        sprintf(ans+anslen+i,"%d",a*10/b);
        a=a*10%b;
    }
    ans[MAX_LEN+9]= anslen=strlen(ans);
    int flags=0;//进位标志
    for (int i=ans[MAX_LEN+9]-1; i>ans[MAX_LEN+8]-1; i--)
    {
        if(flags)
        {
            if(ans[i]=='9')
            {
                ans[i]='0';
                flags=1;
            }
            else//停止进位
            {
                ans[i]++;
                flags=0;
                break;
            }

        }
        if(ans[i]=='9')
        {
            ans[i]='0';
            flags=1;

        }
        else if(ans[i]>='5')
        {
            ans[i]++;
            flags=0;
            break;
        }


    }
    for (int i=ans[MAX_LEN+8]-2; i>=0; i--)
    {
        if(flags)
        {
            if(ans[i]=='9')
            {
                ans[i]='0';
                flags=1;
            }
            else//停止进位
            {
                ans[i]++;
                flags=0;
                break;
            }

        }
        if(ans[i]=='9')
        {
            ans[i]='0';
            flags=1;

        }
        else if(ans[i]>='5')
        {
            ans[i]++;
            flags=0;
            break;
        }


    }
    printf("%s",ans);

    return 0;
}

文章作者: Czq
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 !
评论
  目录