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();
}


發佈了54 篇原創文章 · 獲贊 57 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章