您的位置:首页 > 编程语言 > C语言/C++

C语言:实现大数相除,利用大数相减原理。

2014-06-25 20:14 246 查看
#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
= a
-b[m]+'0';
}
else
a
= a
;
if(a
< '0')
{
a
+= 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");
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: