• poj百练2737大整数除法


    题目链接:http://poj.grids.cn/practice/2737

    #include <iostream>
    #include <string.h>
    #include <stdio.h>
    using namespace std;
    const int N=102;
    char s1[N],s2[N];
    int p1[N],p2[N],result[N];
    int subStract(int *a1,int *a2,int len1,int len2)
    {
        int i;
        if(len1<len2)
            return -1;
        if(len1 == len2)
        {
            i=len1-1;
            while((a1[i]==a2[i]) && (i>=0))
                i--;
            if(0 > i)
                return 0;
            else if(a1[i]<a2[i])
                return -1;
        }
        for(i=0;i<len1;i++)
        {
            a1[i]-=a2[i];
            if(a1[i]<0)
            {
                a1[i]+=10;
                a1[i+1]--;
            }
        }
        for(i=len1-1;i>=0;i--)
        {
            if(a1[i])
                return i+1;
        }
        return 0;
    }
    int main()
    {
        int t,i,j,k,len1,len2;
        scanf("%d",&t);
        while(t-->0)
        {
            for(i=0;i<N;i++)
            {
                result[i]=0;
                p1[i]=0;
                p2[i]=0;
                s1[i]='\0';
                s2[i]='\0';
            }
            cin>>s1>>s2;
            len1=strlen(s1);
            len2=strlen(s2);
            j=0;
            for(i=len1-1;i>=0;i--)
                p1[j++]=s1[i]-'0';
            j=0;
            for(i=len2-1;i>=0;i--)
                p2[j++]=s2[i]-'0';
            //先判断第二个数是否大于第一个数
            if(len2>len1)
            {
                printf("0\n");
                continue;
            }
            int nLen=subStract(p1,p2,len1,len2);
            if(0 == nLen)
            {
                printf("1\n");
                continue;
            }
            if(nLen<0)
            {
                printf("0\n");
                continue;
            }
            result[0]++;
            int nTimes=nLen-len2;
            if(nTimes<0)
                goto outPut;
            if(nTimes>0)
            {
                for(i=nLen-1;i>=0;i--)
                {
                    if(i>=nTimes)
                        p2[i]=p2[i-nTimes];
                    else
                        p2[i]=0;
                }
            }
    //         for(i=nLen-1;i>=0;i--)
    //             cout<<p2[i];
    //         cout<<endl;
            len2=nLen;
            for(j=0;j<=nTimes;j++)
            {
                while((k=subStract(p1,p2+j,nLen,len2-j))>=0)
                {
                    nLen=k;
                    result[nTimes-j]++;
                }
            }
    outPut:
            for(i=0;i<N;i++)
            {
                if(result[i]>=10)
                {
                    result[i+1]+=result[i]/10;
                    result[i]=result[i]%10;
                }
           
            }
            bool flag=true;
            for(i=N-1;i>=0;i--)
            {
                if(flag)
                {
                    if(result[i])
                    {
                        flag=false;
                        printf("%d",result[i]);
                    }
                }
                else
                    printf("%d",result[i]);
            }
            if(flag)
                printf("0\n");
            else
                printf("\n");
        }

        return 0;
    }

  • 相关阅读:
    Linux # $
    python英文学习字典
    python中read(),readline(),和readlines()
    if _name_ =="_main_"
    win10菜单打不开,任务栏右击没有反应
    python中csv转json文件出现:File was loaded in the wrong encoding: 'UTF-8'
    Python字典
    python 匿名函数实现求素数平方和
    Python快速排序的实现
    P1880 [NOI1995]石子合并
  • 原文地址:https://www.cnblogs.com/buptLizer/p/2166212.html
Copyright © 2020-2023  润新知