C语言大数除法

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

#include
#include
#include
#define N 200
/*思路是使用平时打草稿时的运算过程*/
int BigIntSub(char data1[],char data2[]);
/*两个数的相减*/
int BigIntDiv(char div1[],char div2[],char result[]);
/*两个数的相除*/
int BigIntTrim(char value[]);
/*整理这个数的前面没有多余0*/
int AddDivMub(char value[],char ch);
/*往这个数里面添加一个位数,末尾添加*/
int BigIntEqual(char value1[],char value2[]);
int main()
{
char div1[N],div2[N],result[N];
while(scanf("%s%s",div1,div2)==2){
BigIntDiv(div1,div2,result);
printf("%s\n",result);
}
return 0;
}
int BigIntDiv(char div1[],char div2[],char result[]){
int i,k,m,len1,len2;
char ch,*remain;
len1=(int)strlen(div1);len2=(int)strlen(div2);
remain=(char *)malloc((len2+2)*sizeof(char));
strcpy(remain,div1);
remain[len2]='\0';
m=0;
/*首先把余数部分设置为和DIV2等长度的DIV1*/
for(i=len2-1;iBigIntTrim(remain);
/*整理余数*/
if(BigIntEqual(remain,div2)==-1){ /*把余数和除数比较大小,如果余数小*/
AddDivMub(remain,div1[++i]); /*就取出DIV1中下一位放入到余数中*/
result[m++]='0'; /*并且把商添加一个零*/
}else{
k=0;
/*否则就把DIV2和余数进行比较如果大于或等于DIV2进入循环*/
while(BigIntEqual(remain,div2)>=0){
BigIntSub(remain,div2);
/*余数和DIV2相减*/
k++;
}
AddDivMub(remain,div1[++i]);
/*添加余数*/
result[m++]=k+'0';
}
}
result[m]='\0';/*封装商*/
BigIntTrim(result);
return 0;
}
int BigIntTrim(char value[]){
int i,len=strlen(value);
for(i=0;value[i];i++)
if(value[i]!='0')
break;
if(i==len)
strcpy(value,"0");
else
strcpy(value,&value[i]);
return 0;
}
int BigIntEqual(char value1[],char value2[]){
int len1,len2;
len1=(int)strlen(value1);len2=(int)strlen(value2);
if(len1>len2)
return 1;
else
if(len1return -1;
else
return strcmp(value1,value2);
}
int BigIntSub(char data1[],char data2[]){
int value1,value2;
int i,len1,len2,flag;
char *data,*sub1,*sub2;
len1=(int)strlen(data1);
len2=(int)strlen(data2);
sub1=(char *)malloc((len1+1)*sizeof(char));
sub2=(char *)malloc((len1+1)*sizeof(char));
data=(char *)malloc((len1+1)*sizeof(char));
for(i=0;isub2[i]='0';
data[i]='\0';
strcpy(sub1,data1);
strcpy(sub2+(len1-len2),data2);
for(i=len1-1,flag=0;i>=0;i--){
value1=sub1[i]-'0'+flag;
value2=sub2[i]-'0';
if(value1-value2<0){
data[i]=value1+10-value2+'0';
flag=-1;
}else{
data[i]=value1-value2+'0';
flag=0;
}
}
BigIntTrim(data);
strcpy(data1,data);
free(sub1);free(sub2);free(data);
return 0;
}
int AddDivMub(char value[],char ch){
int len=(int)strlen(value);
char *back;
back=(char *)malloc((len+2)*sizeof(char));
strcpy(back,value);
back[len]=ch;
back[len+1]='\0';
strcpy(value,back);
free(back)

;
return 0;
}

相关文档
最新文档