大整数除法



#define MAXINT 1000
#define MAX 200
int num1[MAX+10];
int num2[MAX+10];
unsigned int total[MAX+10];
int Sub(int a,int b)
{
    if (b>=a)
    {
        if (a==b)
            return 0;
        else
            return -1;
    }
    int i = 0;
    for (;a>b;i++)
    {
        b++;
    }
    return i;
}


CString bigDiv(char* str1,char* str2)
{
   memset(num1,0,sizeof(num1));
        memset(num2,0,sizeof(num2));
        memset(total,0,sizeof(total));
        int len,index;
len = strlen(str1);
        index = 0;
        for (int i=len-1;i>=0;i--)
        {
            num1[index++] = str1[i]-'0';
        }
        len = strlen(str2);
        index = 0;
        for (int i=len-1;i>=0;i--)
        {
            num2[index++] = str2[i]-'0';
        }


        if (strlen(str2)>strlen(str1))
        {
           
            return _T("");
        }
        int len1,len2,length;
        len1 = strlen(str1);
        len2 = strlen(str2);
        length = Sub(len1,len2);
        while (1)
        {
            for (int i=len1-1;i>=0;i--)
            {
                if (num1[i])
                {
                    len1 = i+1;
                    break;
                }
            }
            len = Sub(len1,len2);


            int index = 0;
            bool flag = false;
            for (int i=len1-1;i>=len;i--)
            {
                if (num1[i]<num2[i-len])
                {
                    flag = true;
                    break;
                }
                if (num1[i]>num2[i-len])
                {
                    break;
                }


            }
            if (flag)
                len--;
            if (len==-1)
                break;
            while (++index)
            {
                bool flag = false;
                for (int i=len1-1;i>=len;i--)
                {
                    if (num1[i]<num2[i-len])
                    {
                        flag = true;
                        break;
                    }
                    if (num1[i]>num2[i-len])
                    {
                        break;
                    }


                }
                if (flag)
                {
                    index--;
                    break;
                }
                for (int i=len;i<len1;i++)
                {
                    num1[i] -= num2[i-len];
                    if (num1[i]<0)
                    {
                        num1[i] += 10;
                        num1[i+1]--;
                    }
                }
            }
            if (index==0)
                break;
            else
                total[len] = index;
        }
        bool flag = false;
CString str,strData=_T("");
        for (int i=length;i>=0;i--)
        {
            if (flag||total[i])
            {
flag = true;
str.Format(_T("%d"),total[i]);
strData += str;
            }
        }
        if (!flag)
        {
return _T("0");
        }
       
return strData;
}
char *CStringToChar(CString str)
{

const size_t strsize=(str.GetLength()+1)*2; // 宽字符的长度;
char * pstr= new char[strsize]; //分配空间;
size_t sz=0;
wcstombs_s(&sz,pstr,strsize,str,_TRUNCATE);
return pstr;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值