大整数除法
2015-07-12 19:48
323 查看
//大整数除法 #include<stdio.h> #include<string.h> #define MAX_LEN 200 char szLine1[MAX_LEN+10]; char szLine2[MAX_LEN+10]; int an1[MAX_LEN+10]; int an2[MAX_LEN+10]; int aResult[MAX_LEN+10]; int Substract(int *p1,int *p2,int nLen1,int nLen2)//返回值代表结果的长度 { int i; if(nLen1<nLen2) return -1; bool bLarger=false; if(nLen1==nLen2) { for(i=nLen1-1;i>=0;i--) { if(p1[i]>p2[i]) bLarger=true; else if(p1[i]<p2[i]){ if(!bLarger) return -1; } } } for(i=0;i<nLen1;i++) { p1[i]-=p2[i]; if(p1[i]<0) { p1[i]+=10; p1[i+1]--; } } for(i=nLen1-1;i>=0;i--) if(p1[i]) return i+1; return 0; } int main() { int t,n; scanf("%d",&n); for(t=0;t<n;t++) { scanf("%s",szLine1); scanf("%s",szLine2); int i,j; memset(an1,0,sizeof(an1)); memset(an2,0,sizeof(an2)); memset(aResult,0,sizeof(aResult)); int nLen1=strlen(szLine1); j=0; for(i=nLen1-1;i>=0;i--) an1[j++]=szLine1[i]-'0'; int nLen2=strlen(szLine2); j=0; for(i=nLen2-1;i>=0;i--) an2[j++]=szLine2[i]-'0'; if(nLen1<nLen2) { printf("0\n"); continue; } nLen1=Substract(an1,an2,nLen1,nLen2); if(nLen1<0) { printf("0\n"); continue; } else if(nLen1==0) { printf("1\n"); continue; } aResult[0]++; int nTimes=nLen1-nLen2; if(nTimes<0) goto OutputResult; else if(nTimes>0) { for(i=nLen1-1;i>=0;i--) { if(i>=nTimes) an2[i]=an2[i-nTimes]; else an2[i]=0; } } nLen2=nLen1; for(j=0;j<=nTimes;j++) { int nTmp; while((nTmp=Substract(an1,an2+j,nLen1,nLen2-j))>=0) { nLen1=nTmp; aResult[nTimes-j]++; } } OutputResult: for(i=0;i<MAX_LEN;i++) { if(aResult[i]>=10) { aResult[i+1]+=aResult[i]/10; aResult[i]%10; } } bool bStartOutput=false; for(i=MAX_LEN;i>=0;i--) if(bStartOutput) printf("%d",aResult[i]); else if(aResult[i]) { printf("%d",aResult[i]); bStartOutput=true; } if(!bStartOutput) printf("0\n"); printf("\n"); } return 0; }
相关文章推荐
- MySQL系列之B------MySQL安装
- hdu 4864 Task(贪心)
- Java语言基础1--专题课 拆数
- Binary Tree Postorder Traversal
- Hdu 5113 Black and White ---2014北京现场赛B题
- ASPxPopupControl PopupWindow使用方法
- unity3d热更新插件uLua学习整理
- 第三章:Java语言基础II 第9、10节 综合案例 算命程序
- teamviewer不能传输XP计算机声音
- House Robber (leetcode 198)
- linux下几种目标文件的分析
- NSHashTable的特性和使用
- 轻量级分布式 RPC 框架DIY(转)
- 快速排序
- kvm主机重命名
- 数组中只出现一次的数
- Android--Handler与Message
- 设备信息
- libevent(一) socket属性设置与初始化操作
- The Great Wall I (zoj 3475 最小割最大流)