zoukankan      html  css  js  c++  java
  • 大整数除法

    //大整数除法
    #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
    ");
    			continue;
    		}
    		nLen1=Substract(an1,an2,nLen1,nLen2);
    		if(nLen1<0)
    		{
    			printf("0
    ");
    			continue;
    		}
    		else if(nLen1==0)
    			{
    				printf("1
    ");
    				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
    ");
    			printf("
    ");
    	}
    	return 0;
    }

  • 相关阅读:
    深度解析正则表达式exec和match两者使用的异同以及要注意的地方
    CSS中有关水平居中和垂直居中的解决办法
    Ubunut16.04 安装 Mahout
    正则表达式常用方法
    python字符串判断
    python list
    python一些包
    数据科学中的R和Python: 30个免费数据资源网站
    simple vimrc for python
    python的一些方法
  • 原文地址:https://www.cnblogs.com/javafly/p/6037187.html
Copyright © 2011-2022 走看看