c语言 精确计算问题程序,C语言实例 计算分数的精确值

*问题分析与算法设计

由于计算机字长的限制,常规的浮点运算都有精度限制,为了得到高精度的计算结果,就必须自行设计实现方法。

为了实现高精度的计算,可将商存放在一维数组中,数组的每个元素存放一位十进制数,即商的第一位存放在第一个元素中,商的第二位存放在第二个元素中....,依次类推。这样就可以使用数组不表示一个高精度的计算结果。

进行除法运算时可以模拟人的手工操作,即每次求出商的第一位后,将余数乘以10,再计算商的下一位,重复以上过程,当某次计算后的余数为0 时,表示M/N为有限不循环小数某次计算后的余数与前面的某个余数相同时,则M/N为无限循环小数,从该余数第一次出现之后所求得的各位数就是小数的循环节。

程序具体实现时,采用了数组和其它一些技巧来保存除法运算所得到的余数和商的各位数。

*程序说明与注释

#include

int remainder[101],quotient[101]; /*remainder:存放除法的余数; quotient:依次存放商的每一位*/

int main()

{

int m,n,i,j;

printf("Please input a fraction(m/n)(<0scanf("%d/%d",&m,&n); /*输入被除数和除数*/

printf("%d/%d it's accuracy value is:0.",m,n);

for(i=1;i<=100;i++) /*i: 商的位数*/

{

remainder[m]=i; /*m:除的余数 remainder[m]:该余数对应的商的位数*/

m*=10; /*余数扩大10位*/

quotient[i]=m/n; /*商*/

m=m%n; /*求余数*/

if(m==0) /*余数为0 则表示是有限小数*/

{

for(j=1;j<=1;j++) printf("%d",quotient[j]); /*输出商*/

break; /*退出循环*/

}

if(remainder[m]!=0) /*若该余数对应的位在前面已经出现过*/

{

for(j=1;j<=i;j++) printf("%d",quotient[j]); /*则输出循环小数*/

printf("\n\tand it is a infinite cyclic fraction from %d\n",remainder[m]);

printf("\tdigit to %d digit after decimal point.\n",i);

/*输出循环节的位置*/

break; /*退出*/

}

}

}

*思考题

使用数组实现计算MXN的精确值

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值