注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Leo

笑:胸怀,傲:实力,才能笑傲江湖。

 
 
 

日志

 
 

C++学习之——大数相除  

2012-03-27 18:44:28|  分类: 大学留笔 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
上接大数相加的前期准备:
int Comp,Comp1,m,k,d,x,len12,len13,len14;
char* Title = new char[MAXNUM];
strcpy(Title,"   余数是:");
len12 = len1;//保存len1
Comp = Compare(Num1,Num2,len1,len2);

if (Comp == 0) //被除数大
{
GetDlgItem(IDC_RESULT)->SetWindowText("0    (被除数大!)");
return;
}
if (Comp == 2)//两个数相等
{
GetDlgItem(IDC_RESULT)->SetWindowText("1    (两个数相等!)");
return;
}
m = 0;
do //除数大
{
while (Num1[len1-1] == 0)//得到除数的长度
{
len1--;
}
Comp1 = Compare(Num1,Num2,len1,len2);
if (Comp1 >= 1)//除数不小于被除数
{
k = Compare1(Num1,Num2,len1,len2);
Num3[k]++;
if(k > m) m = k;
d = 0;
for (i=k; i<=m; i++)
{
x = Num3[i] + d;
Num3[i] = x % 10;
d = x / 10;
}
if (d > 0)
{
m++;
Num3[m] = d;
}
}
} while(Comp1 == 1);
len14 = len13 = len12;
while (!Num3[len12-1]) len12 --;//得到长度
for (i=0; i<len12; i++)//转换商
{
m_Num3[len12-1-i] = Num3[i] + 48;
}
m_Num3[len12] = '\0';

while(!Num1[len14-1]) len14 --;
for (i=0; i<len14; i++)//转换余数
{
m_Num1[len14-1-i] = Num1[i] + 48;
}
m_Num1[len14] = '\0';

while(!Num1[len13]) len13 --;//如果余数为0,则整除。
if(len13 < 0) 
{
strcpy(Title,"   (余数: 0)");
}else{
strcat(Title,m_Num1);
}
strcat(m_Num3,Title);
M_Result.Format("%s",m_Num3);
GetDlgItem(IDC_RESULT)->SetWindowText(M_Result);
delete Title;

涉及函数:

/*
函数说明:判断除数和被除数的大小,长度比较
返回值:0:被除数大
1:除数大
2:两个数相等
  */
int Compare(int a[],int b[],int len1,int len2)
{
int i,k;
if (len1 < len2)//判断谁大
{
k = 0;
}else if (len1 > len2)
{
k = 1;
}else{//位数相等前提下,判断大小
for (i=len1-1; i>=0; i--)
{
if (a[i] == b[i])
{
k = 2;//两个数相等
}else if(a[i] < b[i])
{
k = 0;//被除数大
break;
}else{
k = 1;//除数大
break;
}
}
}
return k;
}

int Compare1(int a[],int b[],int len1,int len2) 
{
int i,k,d[MAXNUM]={0};
for (i=0; i<len2; i++)
{
d[i] = b[i];
}
k = len1 - len2 - 1;//len1大的
if (k < 0) k = 0;
if (k > 0)
{
for (i=len2-1; i>=0; i--)
{
d[i+k] = b[i];
}
for (i=0; i<k; i++)
{
d[i] = 0;
}
}
for (i=0; i<len1; i++)
{
if (a[i] < d[i])
{
a[i+1]--;
a[i] += 10;
}
a[i] -= d[i];
}
return k;
}

  评论这张
 
阅读(755)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017