大数除(正整数整除)
发布时间:2020-12-14 02:14:42 所属栏目:大数据 来源:网络整理
导读:大数除(正整数整除) My solution: /*2015.10.31*/ span style="font-size:14px;"#includestdio.h#includestring.hchar c1[100],c2[100];int t1[100],t2[100],result[100];int yuchu(int *a,int *b,int n,int m){int i,j; if(nm)return -1;if(n==m)for(i=n-
大数除(正整数整除) My solution: /*2015.10.31*/
<span style="font-size:14px;">#include<stdio.h> #include<string.h> char c1[100],c2[100]; int t1[100],t2[100],result[100]; int yuchu(int *a,int *b,int n,int m) { int i,j; if(n<m) return -1; if(n==m) for(i=n-1;i>=0;i--) { if(a[i]<b[i]) return -1; if(a[i]>b[i]) break; } for(i=0;i<n;i++) { a[i]-=b[i]; if(a[i]<0) { a[i]+=10; a[i+1]--;//向高位借1. } } for(i=n-1;i>=0;i--)//找出最高位不为0的元素下标 if(a[i]) return i+1;//i+1表示处理后的t1数组的有效数组元素个数(没有前缀0) 如:001203300,有效元素个数为7 return i+1; } void chu(int cha,int t) { int n,n1,m,j; n=t;m=t; for(j=0;j<=cha;j++)//这里一定要加=号,t2数组从该地址(下标为cha)起到m下标结束,存放的是原始数值即同输入的除数一样 { /*由于被除数位数不足,通过j,依次减去t2数组后缀0,从而继续调用yuchu()*/ while((n1=yuchu(t1,t2+j,n,m-j))>=0)/*n,(m-j)记录当前处理的t1,t2数组的元素个数,表示除数从第j位开始参与处理*/ { n=n1; result[cha-j]++; /*(cha-j)记录的是当前求得的商存放在结果数组(result)中的下标 */ } /*每成功减一次,对应的记录商的元素加1*/ } j=cha+1; while(!result[--j]);/*去除前缀0,如20000/25得到的结果为(cha=3):result[3]=0,result[2]=8,result[1]=0,result[0]=0*/ for(;j>=0;j--) printf("%d",result[j]); printf("n"); } int main() { int i,j,l1,l2,cha; while(scanf("%s%s",c1,c2)==2) { memset(t1,sizeof(t1)); memset(t2,sizeof(t2)); memset(result,sizeof(result)); l1=strlen(c1); l2=strlen(c2); if(l1<l2) printf("0n"); else { for(j=0,i=l1-1;i>=0;i--) t1[j++]=c1[i]-'0'; for(j=0,i=l2-1;i>=0;i--) t2[j++]=c2[i]-'0'; cha=l1-l2;/*最后求得商按位存储在result[cha]......result[0]中*/ if(cha) { for(i=l1-1;i>=cha;i--) t2[i]=t2[i-cha]; for(;i>=0;i--) t2[i]=0; } chu(cha,l1); } } return 0; }</span> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |