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

Leo

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

 
 
 

日志

 
 

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

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

  下载LOFTER 我的照片书  |
#define MAXNUM 50000

int i,j,len1,len2,len3,temp;
char* m_Num1;
char* m_Num2;
char* m_Num3;
int Num1[MAXNUM],Num2[MAXNUM],Num3[MAXNUM];//定义三个数组,装载运算数
memset(Num1,0,sizeof(Num1));//清空
memset(Num2,0,sizeof(Num2));
memset(Num3,0,sizeof(Num3));
GetDlgItem(IDC_EDIT_NUM1)->GetWindowText(M_Num1);//获得Edit的上输入的大数
GetDlgItem(IDC_EDIT_NUM2)->GetWindowText(M_Num2);
if (M_Num1 == "" || M_Num2 == "") {MessageBox("请输入需要运算的数字!","系统提示:",MB_OK);return;}
len1 = strlen(((char*)(LPCSTR)M_Num1)); 
len2 = strlen(((char*)(LPCSTR)M_Num2));
len3 = len1 > len2 ? len1 : len2;
m_Num1 = new char[len1];//开辟空间
m_Num2 = new char[len2];
m_Num3 = new char[MAXNUM];//注意不要用为()了.()是赋值吧,[]开辟空间大小
m_Num1 = (char*)(LPCSTR)M_Num1;//CString->char*
m_Num2 = (char*)(LPCSTR)M_Num2;
for(i=len1-1; i>=0; i--)//把输入的字符串转换成int数组,转换后是从低位到高位
{
Num1[len1-1-i] = m_Num1[i] - 48;// "="后面的char型自动转换为ossic码值,然后和48相减,就是十进制值。
}
for(i=len2-1; i>=0; i--)
{
Num2[len2-1-i] = m_Num2[i] - 48;
}

前面的准备工作做好了,现在开始相加
temp = 0;//进位归0
i = 0;
while (i < len3)//先相加,不看最高位相加是否有进位
{
Num3[i] = Num1[i] + Num2[i] + temp;
temp = 0;
if (Num3[i] >= 10) 
{
temp = Num3[i]/10;//获得进位
Num3[i] = Num3[i]%10;//取余的到本位的值
}
i++;//为最高位进位加空间,或者为'\0'。
}
if (temp != 0)//最高两位相加大于10,需要再向后面一位进位
{
Num3[i] = temp;
i++; //为'\0'
}
len3 = i;
for (i=len3-1; i>=0; i--)
{
m_Num3[len3-1-i] = Num3[i] + 48;//变为字符
}
m_Num3[len3] = '\0';//字符串最后的‘\0’
M_Result.Format("%s",m_Num3);//char* -> CString
GetDlgItem(IDC_RESULT)->SetWindowText(M_Result);//显示在Edit上
  评论这张
 
阅读(453)| 评论(0)
推荐 转载

历史上的今天

评论

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

页脚

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