⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 poptestdiv.cpp

📁 一个用来对非常大的数进行科学计算的程序库
💻 CPP
字号:
// PopTestDiv.cpp : implementation file
//
#include "stdafx.h"
#include "NonLimitCalculator.h"
#include "PopTestDiv.h"
#include "CLongInt.h"
#include "MyUsefulFunction.h"
#include "ThreadFunction.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CPopTestDiv dialog
CPopTestDiv::CPopTestDiv(CWnd* pParent /*=NULL*/)
: CDialog(CPopTestDiv::IDD, pParent)
{
	//{{AFX_DATA_INIT(CPopTestDiv)
	m_csEdit1 = _T("");
	m_csEdit2 = _T("");
	m_csComMod = _T("");
	m_csComQuo = _T("");
	m_csMyMod = _T("");
	m_csMyQuo = _T("");
	//}}AFX_DATA_INIT
}

/////////////////////////////////////////////////////////////////////////////
void CPopTestDiv::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CPopTestDiv)
	DDX_Text(pDX, IDC_EDIT1, m_csEdit1);
	DDV_MaxChars(pDX, m_csEdit1, 30);
	DDX_Text(pDX, IDC_EDIT2, m_csEdit2);
	DDV_MaxChars(pDX, m_csEdit2, 30);
	DDX_Text(pDX, IDC_STATIC_COMMODRESULT, m_csComMod);
	DDX_Text(pDX, IDC_STATIC_COMQUORESULT, m_csComQuo);
	DDX_Text(pDX, IDC_STATIC_MYMODRESULT, m_csMyMod);
	DDX_Text(pDX, IDC_STATIC_MYQUORESULT, m_csMyQuo);
	//}}AFX_DATA_MAP
}


/////////////////////////////////////////////////////////////////////////////
BOOL CPopTestDiv::TestCalc(BOOL bCheck)
{
	CLongInt li1, li2, liResult, liMod;
	long l1, l2, lResult, lMod;
	CString cs;
	BOOL bIsEqual = TRUE;
	
	UpdateData(TRUE);
	try
	{
		li1 = m_csEdit1;
		li2 = m_csEdit2;
		liResult = Div(li1, li2).liQuotient;
		liMod = Div(li1, li2).liModulus;
	}
	
	catch(CLongIntDivException *e)
	{
		e->ReportError(MB_OK, IDS_STRING_DIVZERO);

		m_csComQuo = "0";
		m_csComMod = "0";
		m_csMyQuo = "0";
		m_csMyMod = "0";

		e->Delete();
		return TRUE;
	}

	catch(CLongIntIsNotNumberException * e)
	{
		e->ReportError(MB_OK, IDS_STRING_ISNOTNUM);

		m_csComQuo = "0";
		m_csComMod = "0";
		m_csMyQuo = "0";
		m_csMyMod = "0";

		e->Delete();
		return TRUE;
	}

	if (!bCheck)
	{
		l1 = atol(li1.GetNumString());
		l2 = atol(li2.GetNumString());
		lResult = long(l1 / l2);
		lMod = l1 % l2;
	}
	else
	{
		lResult = 0;
		lMod = 0;
	}
	
	cs.Format("%ld", lResult);
	m_csComQuo = cs;
	
	cs.Format("%ld", lMod);
	m_csComMod = cs;
	
	cs = liResult.GetNumString();
	m_csMyQuo = cs;
	
	cs = liMod.GetNumString();
	m_csMyMod = cs;

	if (m_csComQuo != m_csMyQuo && !bCheck)
	{
		MessageBox("商数结果不一致!", "注意", MB_OK | MB_ICONSTOP);
		bIsEqual = FALSE;
	}

	if (m_csComMod != m_csMyMod && !bCheck)
	{
		MessageBox("余数结果不一致!", "注意", MB_OK | MB_ICONSTOP);
		bIsEqual = FALSE;
	}

	UpdateData(FALSE);

	return bIsEqual;
}

/////////////////////////////////////////////////////////////////////////////
LRESULT CPopTestDiv::OnRandomTest(WPARAM wParam, LPARAM lParam)
{
	CLongInt li1, li2, liResult, liMod;
	long l1, l2, lResult, lMod;
	CString cs;
	DIVIDERESULT dr;
	BOOL bIsEqual = TRUE;
	RANDOMTESTPARAM * rtp = (RANDOMTESTPARAM *)lParam;
	
	HANDLE m_hEvent = OpenEvent(EVENT_MODIFY_STATE, FALSE, "ShouldStop");
	ASSERT(m_hEvent);

	l1 = GetRandomNumberByLength(rtp -> iLength1);
	do
	{
		l2 = GetRandomNumberByLength(rtp -> iLength2);
	}while(l2 == 0);

	li1 = l1;
	li2 = l2;

	lResult = long(l1 / l2);
	lMod = long(l1 % l2);

	DWORD dwStartTime = GetTickCount();

	dr = Div(li1, li2);
	liResult = dr.liQuotient;
	liMod = dr.liModulus;

	rtp -> dwElapsedTime += GetTickCount() - dwStartTime;

	m_csEdit1 = li1.GetNumString();
	m_csEdit2 = li2.GetNumString();

	cs.Format("%ld", lResult);
	m_csComQuo = cs;
	
	cs.Format("%ld", lMod);
	m_csComMod = cs;
	
	cs = liResult.GetNumString();
	m_csMyQuo = cs;
	
	cs = liMod.GetNumString();
	m_csMyMod = cs;

	UpdateData(FALSE);

	CEdit *pEdit = (CEdit *)GetDlgItem(IDC_EDIT1);
	pEdit->UpdateWindow();
	pEdit = (CEdit *)GetDlgItem(IDC_EDIT2);
	pEdit->UpdateWindow();

	if (m_csComQuo != m_csMyQuo || m_csComMod != m_csMyMod)
	{
		SetEvent(m_hEvent);
		MessageBox("结果不一致!", "注意", MB_OK | MB_ICONSTOP);
		bIsEqual = FALSE;
		::SendMessage(rtp -> hWndTop, WM_RESETREADONLYFLAG, 0, 0);
	}

	return bIsEqual;
}


/////////////////////////////////////////////////////////////////////////////
void CPopTestDiv::OnOK() 
{
	// TODO: Add extra validation here
	
	//	CDialog::OnOK();
}

/////////////////////////////////////////////////////////////////////////////
void CPopTestDiv::OnCancel() 
{
	// TODO: Add extra cleanup here
	
	//CDialog::OnCancel();
}

/////////////////////////////////////////////////////////////////////////////
BOOL CPopTestDiv::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	// TODO: Add extra initialization here
	
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

/////////////////////////////////////////////////////////////////////////////
void CPopTestDiv::SetReadOnly(BOOL bIsReadOnly)
{
	CEdit *pEdit = (CEdit *)GetDlgItem(IDC_EDIT1);
	pEdit->SetReadOnly(bIsReadOnly);
	pEdit->UpdateWindow();
	pEdit = (CEdit *)GetDlgItem(IDC_EDIT2);
	pEdit->SetReadOnly(bIsReadOnly);
	pEdit->UpdateWindow();
}

/////////////////////////////////////////////////////////////////////////////
LRESULT CPopTestDiv::OnResetReadOnlyFlag(WPARAM wParam, LPARAM lParam)
{
	SetReadOnly(FALSE);
	return 1;
}

/////////////////////////////////////////////////////////////////////////////
BEGIN_MESSAGE_MAP(CPopTestDiv, CDialog)
	//{{AFX_MSG_MAP(CPopTestDiv)
	//}}AFX_MSG_MAP
ON_MESSAGE(WM_RANDOMTEST, OnRandomTest)
ON_MESSAGE(WM_RESETREADONLYFLAG, OnResetReadOnlyFlag)
END_MESSAGE_MAP()


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -