admin管理员组文章数量:1794759
MFC计算器项目——进制转换模块
计算器进制转换模块(运行效果图参见计算器项目综述)
开发文档截图
该模块实现了2进制到36进制之间的任意转换,可能有人会问为什么是2到32进制之间呢?这个36是怎么来的呢?
这个是因为超出36后字母表示就不那么方便了,0-9加上a-z就是36个啦 当然要表示办法总是有的,比如用大写的英文字母A-Z,但是常用的进制转换(2,8,10,16)也都没有超出36不是?
核心代码如下:
// MyDlg_2.cpp : implementation file // #include "stdafx.h" #include "简化调试.h" #include "math.h" #include "string.h" #include "stack" #include "简化调试Dlg.h" #include "MyDlg_1.h" #include "MyDlg_2.h" #include "MyDlg_3.h" using namespace std; #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif stack <int> base_change; / // CMyDlg_2 dialog CMyDlg_2::CMyDlg_2(CWnd* pParent /*=NULL*/) : CDialog(CMyDlg_2::IDD, pParent) { //{{AFX_DATA_INIT(CMyDlg_2) m_str1 = _T(""); m_str2 = _T(""); m_base1 = 0; m_base2 = 0; //}}AFX_DATA_INIT } void CMyDlg_2::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CMyDlg_2) DDX_Text(pDX, IDC_EDIT1, m_str1); DDX_Text(pDX, IDC_EDIT4, m_str2); DDX_Text(pDX, IDC_EDIT2, m_base1); DDX_Text(pDX, IDC_EDIT3, m_base2); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CMyDlg_2, CDialog) //{{AFX_MSG_MAP(CMyDlg_2) ON_BN_CLICKED(IDC_BUTTON1, OnButton1) ON_COMMAND(ID_MENUITEM2, OnMenuitem2) ON_COMMAND(ID_MENUITEM0, OnMenuitem0) ON_COMMAND(ID_MENUITEM1, OnMenuitem1) ON_COMMAND(ID_MENUITEM3, OnMenuitem3) //}}AFX_MSG_MAP END_MESSAGE_MAP() / // CMyDlg_2 message handlers void CMyDlg_2::OnButton1() { // TODO: Add your control notification handler code here UpdateData(); m_str2 = ""; char dig2_str1[50]; strncpy(dig2_str1,m_str1,sizeof(dig2_str1)); int sum_base = 0,p = 0; if(m_base1>10) { for(int i=0;i<strlen(dig2_str1);i++) { if(dig2_str1[i] >= 'a') sum_base += (dig2_str1[i]- 'a' + 10) * pow(m_base1,(strlen(dig2_str1)-i-1)); else sum_base += (dig2_str1[i]-'0') * pow(m_base1,(strlen(dig2_str1)-i-1)); } while(sum_base>0) { base_change.push(sum_base%m_base2); sum_base = sum_base / m_base2; } if(m_base2>10) { while(!base_change.empty()) { if(base_change.top() >= 10) m_str2 += (base_change.top() -10 + 'a'); else m_str2 += (base_change.top() + '0'); base_change.pop(); } } else { while(!base_change.empty()) { m_str2 += (base_change.top() + '0'); base_change.pop(); } } } else { for(int i=0;i<strlen(dig2_str1);i++) { sum_base += (dig2_str1[i]-'0') * pow(m_base1,(strlen(dig2_str1)-i-1)); } while(sum_base>0) { base_change.push(sum_base%m_base2); sum_base = sum_base / m_base2; } if(m_base2>10) { while(!base_change.empty()) { if(base_change.top() >= 10) m_str2 += (base_change.top() -10 + 'a'); else m_str2 += (base_change.top() + '0'); base_change.pop(); } } else { while(!base_change.empty()) { m_str2 += (base_change.top() + '0'); base_change.pop(); } } } UpdateData(FALSE); } void CMyDlg_2::OnMenuitem2() { // TODO: Add your command handler code here MessageBox("您已处于进制转换模式!"); } void CMyDlg_2::OnMenuitem0() { // TODO: Add your command handler code here CMyDlg_2::OnCancel(); CMyDlg dlg; dlg.DoModal(); } void CMyDlg_2::OnMenuitem1() { // TODO: Add your command handler code here CMyDlg_2::OnCancel(); CMyDlg_1 dlg; dlg.DoModal(); } void CMyDlg_2::OnMenuitem3() { // TODO: Add your command handler code here CMyDlg_2::OnCancel(); CMyDlg_3 dlg; dlg.DoModal(); }版权声明:本文标题:MFC计算器项目——进制转换模块 内容由林淑君副主任自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.xiehuijuan.com/baike/1686581841a84245.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论