📄 tooldlg.cpp
字号:
#include "stdafx.h"
#include "RsaKit.h"
#include "ToolDlg.h"
CToolDlg::CToolDlg(CWnd* pParent /*=NULL*/)
: CDialog(CToolDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CToolDlg)
m_A = _T("");
m_B = _T("");
m_C = _T("");
//}}AFX_DATA_INIT
}
void CToolDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CToolDlg)
DDX_Text(pDX, IDC_A, m_A);
DDX_Text(pDX, IDC_B, m_B);
DDX_Text(pDX, IDC_C, m_C);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CToolDlg, CDialog)
//{{AFX_MSG_MAP(CToolDlg)
ON_BN_CLICKED(IDC_BUTTON_ADD, OnButtonAdd)
ON_BN_CLICKED(IDC_BUTTON_DEC, OnButtonDec)
ON_BN_CLICKED(IDC_BUTTON_DIV, OnButtonDiv)
ON_BN_CLICKED(IDC_BUTTON_EUC, OnButtonEuc)
ON_BN_CLICKED(IDC_BUTTON_EXP, OnButtonExp)
ON_BN_CLICKED(IDC_BUTTON_HEX, OnButtonHex)
ON_BN_CLICKED(IDC_BUTTON_MOD, OnButtonMod)
ON_BN_CLICKED(IDC_BUTTON_MUL, OnButtonMul)
ON_BN_CLICKED(IDC_BUTTON_SUB, OnButtonSub)
ON_BN_CLICKED(IDC_BUTTON_SQRT, OnButtonSqrt)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
void CToolDlg::OnButtonAdd()
{
UpdateData(TRUE);
if((m_A.GetLength()>380)||(m_B.GetLength()>380))
{
m_C=_T("A、B不得大于380位");
UpdateData(FALSE);
return;
}
for(int i=0;i<m_A.GetLength();i++)
{
if((m_A[i]<'0')||(m_A[i]>'9'))
{
m_C=_T("A必须为0-9组成的整数");
UpdateData(FALSE);
return;
}
}
A.Get(m_A,DEC);
B.Get(m_B,DEC);
C.Mov(A.Add(B));
C.Put(m_C,DEC);
UpdateData(FALSE);
return;
}
void CToolDlg::OnButtonSub()
{
UpdateData(TRUE);
if((m_A.GetLength()>380)||(m_B.GetLength()>380))
{
m_C=_T("A、B不得大于380位");
UpdateData(FALSE);
return;
}
for(int i=0;i<m_A.GetLength();i++)
{
if((m_A[i]<'0')||(m_A[i]>'9'))
{
m_C=_T("A必须为0-9组成的整数");
UpdateData(FALSE);
return;
}
}
A.Get(m_A,DEC);
B.Get(m_B,DEC);
if(A.Cmp(B)>=0)
{
C.Mov(A.Sub(B));
C.Put(m_C,DEC);
}
else
{
C.Mov(B.Sub(A));
C.Put(m_C,DEC);
m_C.Insert(0,'-');
}
UpdateData(FALSE);
return;
}
void CToolDlg::OnButtonMul()
{
UpdateData(TRUE);
if((m_A.GetLength()+m_B.GetLength())>380)
{
m_C=_T("A、B位数之和不得大于380");
UpdateData(FALSE);
return;
}
for(int i=0;i<m_A.GetLength();i++)
{
if((m_A[i]<'0')||(m_A[i]>'9'))
{
m_C=_T("A必须为0-9组成的整数");
UpdateData(FALSE);
return;
}
}
A.Get(m_A,DEC);
B.Get(m_B,DEC);
C.Mov(A.Mul(B));
C.Put(m_C,DEC);
UpdateData(FALSE);
return;
}
void CToolDlg::OnButtonDiv()
{
UpdateData(TRUE);
if((m_A.GetLength()>380)||(m_B.GetLength()>380))
{
m_C=_T("A、B不得大于380位");
UpdateData(FALSE);
return;
}
for(int i=0;i<m_A.GetLength();i++)
{
if((m_A[i]<'0')||(m_A[i]>'9'))
{
m_C=_T("A必须为0-9组成的整数");
UpdateData(FALSE);
return;
}
}
if((m_B=="0")||(m_B==""))
{
m_C=_T("B不得为0");
UpdateData(FALSE);
return;
}
A.Get(m_A,DEC);
B.Get(m_B,DEC);
C.Mov(A.Div(B));
C.Put(m_C,DEC);
UpdateData(FALSE);
return;
}
void CToolDlg::OnButtonMod()
{
UpdateData(TRUE);
if((m_A.GetLength()>310)||(m_B.GetLength()>310))
{
m_C=_T("A、B不得大于380位");
UpdateData(FALSE);
return;
}
for(int i=0;i<m_A.GetLength();i++)
{
if((m_A[i]<'0')||(m_A[i]>'9'))
{
m_C=_T("A必须为0-9组成的整数");
UpdateData(FALSE);
return;
}
}
if((m_B=="0")||(m_B==""))
{
m_C=_T("B不得为0");
UpdateData(FALSE);
return;
}
A.Get(m_A,DEC);
B.Get(m_B,DEC);
C.Mov(A.Mod(B));
C.Put(m_C,DEC);
UpdateData(FALSE);
return;
}
void CToolDlg::OnButtonExp()
{
UpdateData(TRUE);
for(int i=0;i<m_A.GetLength();i++)
{
if((m_A[i]<'0')||(m_A[i]>'9'))
{
m_C=_T("A必须为0-9组成的整数");
UpdateData(FALSE);
return;
}
}
if((m_B=="")||(m_B=="0"))
{
if((m_A=="")||(m_A=="0"))m_C="0的0次幂不存在";
else m_C="1";
UpdateData(FALSE);
return;
}
A.Get(m_A,DEC);
B.Get(m_B,DEC);
int k;
unsigned long num;
k=B.m_nLength*32-32;
num=B.m_ulValue[B.m_nLength-1];
while(num){num=num>>1;k++;}
C.Mov(A);
for(i=k-2;i>=0;i--)
{
if(C.m_nLength<20)C.Mov(C.Mul(C));
else{m_C=_T("对不起,结果太大");UpdateData(FALSE);return;}
if((B.m_ulValue[i>>5]>>(i&31))&1)
{
if(C.m_nLength+A.m_nLength<40)C.Mov(C.Mul(A));
else{m_C=_T("对不起,结果太大");UpdateData(FALSE);return;}
}
}
C.Put(m_C,DEC);
UpdateData(FALSE);
return;
}
void CToolDlg::OnButtonSqrt()
{
UpdateData(TRUE);
if((m_A.GetLength()>380)||(m_B.GetLength()>380))
{
m_C=_T("A、B不得大于380位");
UpdateData(FALSE);
return;
}
for(int i=0;i<m_A.GetLength();i++)
{
if((m_A[i]<'0')||(m_A[i]>'9'))
{
m_C=_T("A必须为0-9组成的整数");
UpdateData(FALSE);
return;
}
}
A.Get(m_A,DEC);
A.Mov(A.Sqrt());
A.Put(m_C,DEC);
UpdateData(FALSE);
return;
}
void CToolDlg::OnButtonEuc()
{
UpdateData(TRUE);
if((m_A.GetLength()>380)||(m_B.GetLength()>380))
{
m_C=_T("A、B不得大于380位");
UpdateData(FALSE);
return;
}
for(int i=0;i<m_A.GetLength();i++)
{
if((m_A[i]<'0')||(m_A[i]>'9'))
{
m_C=_T("A必须为0-9组成的整数");
UpdateData(FALSE);
return;
}
}
A.Get(m_A,DEC);
B.Get(m_B,DEC);
if(A.Cmp(B)<=0)
{
m_C=_T("B必须小于A");
UpdateData(FALSE);
return;
}
C.Mov(B.ModInv(A));
C.Put(m_C,DEC);
UpdateData(FALSE);
return;
}
void CToolDlg::OnButtonDec()
{
UpdateData(TRUE);
if(m_A.GetLength()>320)
{
m_C=_T("A不得大于320位");
UpdateData(FALSE);
return;
}
for(int i=0;i<m_A.GetLength();i++)
{
if((m_A[i]<'0')||
((m_A[i]>'9')&&(m_A[i]<'A'))||
((m_A[i]>'F')&&(m_A[i]<'a'))||
(m_A[i]>'f'))
{
m_C=_T("A必须为0-9或A-F或a-f组成的整数");
UpdateData(FALSE);
return;
}
}
A.Get(m_A,HEX);
A.Put(m_C,DEC);
UpdateData(FALSE);
return;
}
void CToolDlg::OnButtonHex()
{
UpdateData(TRUE);
if(m_A.GetLength()>380)
{
m_C=_T("A不得大于380位");
UpdateData(FALSE);
return;
}
for(int i=0;i<m_A.GetLength();i++)
{
if((m_A[i]<'0')||(m_A[i]>'9'))
{
m_C=_T("A必须为0-9组成的整数");
UpdateData(FALSE);
return;
}
}
A.Get(m_A,DEC);
A.Put(m_C,HEX);
UpdateData(FALSE);
return;
}
/*
void CToolDlg::OnButtonFac()
{
UpdateData(TRUE);
if(m_A.GetLength()>40){m_C=_T("A不得大于40位");UpdateData(FALSE);return;}
for(int i=0;i<m_A.GetLength();i++)
{
if((m_A[i]<'0')||(m_A[i]>'9'))
{
m_C=_T("A必须为0-9组成的整数");
UpdateData(FALSE);
return;
}
}
if((m_A=="")||(m_A=="0")||(m_A=="1"))
{
m_C=_T("0和1不能分解质因数");
UpdateData(FALSE);
return;
}
A.Get(m_A,DEC);
i=A.TestPrime();
if(i>1)
{
m_C.Format("%d",i);
m_C+=_T("是A的质因数");
UpdateData(FALSE);
return;
}
if(i==0)
{ m_C=_T("A 99.99%是质数");
UpdateData(FALSE);
return;
}
CBigInt B,I;
B.Mov(4003);
while(1)
{
I.Mov(A.Mod(B));
if((I.m_nLength==1)&&(I.m_ulValue[0]==0))break;
B.Mov(B.Add(2));
}
B.Put(m_C,DEC);
m_C+=_T("是A的质因数");
UpdateData(FALSE);
return;
}
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -