计算器进制转换模块(运行效果图参见计算器项目综述)
开发文档截图
该模块实现了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计算器项目——进制转换模块
发布评论