C语言 输入正整数a,b,c,输出a/b的小数形式,保留小数点后c位.a,b

来源:学生作业帮助网 编辑:作业帮 时间:2024/11/07 18:47:52

C语言 输入正整数a,b,c,输出a/b的小数形式,保留小数点后c位.a,b
C语言 输入正整数a,b,c,输出a/b的小数形式,保留小数点后c位.a,b

C语言 输入正整数a,b,c,输出a/b的小数形式,保留小数点后c位.a,b
#include <stdio.h>

//最大的精度
#define MAX_LENGTH 120

//计算商
int GetFactor(int a, int b)
{
\x09return a / b;
}

//计算余数
int GetRemainder(int a, int b)
{
\x09return a - (a/b * b);
}

//是否整除
bool IsAliquot(int a, int b)
{
\x09bool ret = false;
\x09if(a%b == 0)
\x09{
\x09\x09ret = true;
\x09}
\x09return ret;
}

//模拟竖式计算
void Division(int a, int b, int precision, int ans[MAX_LENGTH])
{
\x09if(precision > MAX_LENGTH)
\x09{
\x09\x09return;
\x09}
\x09int i=0;
\x09for(i=0; i<MAX_LENGTH; i++)
\x09{
\x09\x09ans[i] = 0;
\x09}
\x09
\x09int calA = a, calB = b;
\x09ans[0] = GetFactor(calA, calB);
\x09
\x09//模拟竖式计算
\x09for(i=1; i<=precision; i++)
\x09{
\x09\x09if(IsAliquot(calA, calB) == true)//已经整除,不需要再继续进行下去
\x09\x09{
\x09\x09\x09break;
\x09\x09}
\x09\x09calA = GetRemainder(calA, calB);
\x09\x09calA *= 10;
\x09\x09ans[i] = GetFactor(calA, calB);
\x09}
}

void main()
{
\x09int ans[MAX_LENGTH] = {0};
\x09int a = 20;
\x09int b = 3;
\x09int c = 20;

\x09if (c > MAX_LENGTH)
\x09{
\x09\x09return;
\x09}

\x09//计算
\x09Division(a, b, c, ans);
\x09
\x09printf("%d / %d , the answer is:(precision:%d)\n",a, b, c);
\x09printf("%d . ",ans[0]);
\x09
\x09int i = 0;
\x09for(i=1; i<=c ; i++)
\x09{
\x09\x09printf("%d",ans[i]);
\x09\x09if(i%10==0)
\x09\x09{
\x09\x09\x09printf("  ");
\x09\x09}
\x09}
\x09printf("\n");

\x09printf("Calculation finished!\n");
}