#include<stdio.h>
#include<string.h>
char a[100], b[100];
int res[100]={0};
int l1, l2, n, m;
void sub()
{
int i, z=0;
n = l1; //a的长度可能会变化
m = l2; //m在执行sub()时会m--;
for( ; n>=0; n--, m--)
{
if(m>=0)
{
a[n] = a[n]-b[m]+'0';
}
else
a[n] = a[n];
if(a[n] < '0')
{
a[n] += 10;
a[n-1]--;
}
}
while( a[z] == '0' )
z++;
for(i=0; i<=l1-z; i++)
a[i] = a[i+z];
a[l1+1-z] = '\0';
}
void main()
{
int i=0, j, k, p, z;
printf("请输入被除数: ");
gets(a);
printf("\n\n请输入除数: ");
fflush(stdin);
gets(b);
printf("\n\n保留小数点后的位数: ");
scanf("%d", &p);
printf("\n\n%s / %s = ", a, b);
l1=strlen(a)-1;
l2=strlen(b)-1;
对商和有效数字进行计算
for(j=0; j<=p+1; j++) //要看到输出的最后一位的后一位,好判断四舍五入
{
while( ( l1==l2 && strcmp(a, b) >= 0 ) || l1 > l2)
{
sub();
res[i]++; //累加
l1 = strlen(a) -1;
}
i++;
a[l1+1] = '0';
a[l1+2] = '\0';
z=0;
while( a[z] == '0')
z++;
for(k=0; k<=l1-z; k++)
a[k] = a[k+z];
a[l1+2-z] = '\0';
l1 = strlen(a) -1;
}
//对商和有效数字进行判断和输出
if( res[p+1] >= 5 ) //不可写入下面的循环体内,会让res[p]循环p次
res[p]=res[p]+1;
j=p;
while( res[j] > 9 && j>=1 ) //判断小数点后的位数是否大于9,所以j>=1
{
res[j]-=10;
res[j-1]++;
j--;
}
if(p==0)
{
printf("%d\n\n", res[0]);
return;
}
printf("%d.", res[0]);
for(j=1; j<=p; j++)
{
printf("%d", res[j]);
}
printf("\n\n");
}
C语言:实现大数相除,利用大数相减原理。
最新推荐文章于 2022-07-05 11:17:09 发布