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

📄 kechengsheji.txt

📁 一些源代码程序 希望大家自己看看 内容表示的就是这个
💻 TXT
字号:
// NumToNumDlg.cpp : implementation file
//

#include "stdafx.h"
#include "NumToNum.h"
#include "NumToNumDlg.h"
#include "aDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

#define WM_MY_MESSAGE (WM_USER+100)
#define A 10
#define B 11
#define C 12
#define D 13
#define E 14
#define F 15


/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About

class CAboutDlg : public CDialog
{
public:
 CAboutDlg();

// Dialog Data
 //{{AFX_DATA(CAboutDlg)
 enum { IDD = IDD_ABOUTBOX };
 //}}AFX_DATA

 // ClassWizard generated virtual function overrides
 //{{AFX_VIRTUAL(CAboutDlg)
 protected:
 virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
 //}}AFX_VIRTUAL

// Implementation
protected:
 //{{AFX_MSG(CAboutDlg)
 //}}AFX_MSG
 DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
 //{{AFX_DATA_INIT(CAboutDlg)
 //}}AFX_DATA_INIT
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
 CDialog::DoDataExchange(pDX);
 //{{AFX_DATA_MAP(CAboutDlg)
 //}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
 //{{AFX_MSG_MAP(CAboutDlg)
  // No message handlers
 //}}AFX_MSG_MAP
 

END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CNumToNumDlg dialog

CNumToNumDlg::CNumToNumDlg(CWnd* pParent )
 : CDialog(CNumToNumDlg::IDD, pParent)
{
 //{{AFX_DATA_INIT(CNumToNumDlg)
 m_c1 = _T("");
 m_c2 = _T("");
 m_e2 = _T("");
 m_e1 = _T("");
 //}}AFX_DATA_INIT
 // Note that LoadIcon does not require a subsequent DestroyIcon in Win32
 m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CNumToNumDlg::DoDataExchange(CDataExchange* pDX)
{
 CDialog::DoDataExchange(pDX);
 //{{AFX_DATA_MAP(CNumToNumDlg)
 DDX_CBString(pDX, IDC_COMBO1, m_c1);
 DDX_CBString(pDX, IDC_COMBO2, m_c2);
 DDX_Text(pDX, IDC_EDIT1, m_e2);
 DDX_Text(pDX, IDC_EDIT2, m_e1);
 //}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CNumToNumDlg, CDialog)
 //{{AFX_MSG_MAP(CNumToNumDlg)
 ON_WM_SYSCOMMAND()
 ON_WM_PAINT()
 ON_WM_QUERYDRAGICON()
 ON_BN_CLICKED(IDC_BUTTON1, OnButton1)
 //}}AFX_MSG_MAP
 ON_MESSAGE(WM_MY_MESSAGE, OnMyMessage)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CNumToNumDlg message handlers

BOOL CNumToNumDlg::OnInitDialog()
{
 CDialog::OnInitDialog();

 // Add "About..." menu item to system menu.
   
 // IDM_ABOUTBOX must be in the system command range.
 ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
 ASSERT(IDM_ABOUTBOX < 0xF000);

 CMenu* pSysMenu = GetSystemMenu(FALSE);
 if (pSysMenu != NULL)
 {
  CString strAboutMenu;
  strAboutMenu.LoadString(IDS_ABOUTBOX);
  if (!strAboutMenu.IsEmpty())
  {
   pSysMenu->AppendMenu(MF_SEPARATOR);
   pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
  }
 }

 // Set the icon for this dialog.  The framework does this automatically
 //  when the application's main window is not a dialog
 SetIcon(m_hIcon, TRUE);   // Set big icon
 SetIcon(m_hIcon, FALSE);  // Set small icon
 
 // TODO: Add extra initialization here
 
  CheckRadioButton(IDC_RADIO1,IDC_RADIO3,IDC_RADIO1);
  m_c1="10";
  m_c2="10";
  Num=0;
  JZ1=0;
  JZ2=0;
  me1("使用说明:\r\n1.选择好待转换数的进制与要转换数的进制");
  me1("\r\n2.输入要转换的数值");
  me1("\r\n3.选择你想使用的算法");
  me1("\r\n4.去吧,得到你期待已久的数字");
  UpdateData(false);

 

 

 

 

 

 return TRUE;  // return TRUE  unless you set the focus to a control
}

void CNumToNumDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
 if ((nID & 0xFFF0) == IDM_ABOUTBOX)
 {
  CAboutDlg dlgAbout;
  dlgAbout.DoModal();
 }
 else
 {
  CDialog::OnSysCommand(nID, lParam);
 }
}

// If you add a minimize button to your dialog, you will need the code below
//  to draw the icon.  For MFC applications using the document/view model,
//  this is automatically done for you by the framework.

void CNumToNumDlg::OnPaint()
{
 if (IsIconic())
 {
  CPaintDC dc(this); // device context for painting

  SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

  // Center icon in client rectangle
  int cxIcon = GetSystemMetrics(SM_CXICON);
  int cyIcon = GetSystemMetrics(SM_CYICON);
  CRect rect;
  GetClientRect(&rect);
  int x = (rect.Width() - cxIcon + 1) / 2;
  int y = (rect.Height() - cyIcon + 1) / 2;

  // Draw the icon
  dc.DrawIcon(x, y, m_hIcon);
 }
 else
 {
  CDialog::OnPaint();
 }
}

// The system calls this to obtain the cursor to display while the user drags
//  the minimized window.
HCURSOR CNumToNumDlg::OnQueryDragIcon()
{
 return (HCURSOR) m_hIcon;
}


int exp(int a,int b)
{int k=1;
 for(int i=0;i<a;i++)
 {k=k*b;}
 return k;
}


char* abc(int a)
{switch(a)

{
case 0: return "0";
case 1: return "1";
case 2: return "2";
case 3: return "3";
case 4: return "4";
case 5: return "5";
case 6: return "6";
case 7: return "7";
case 8: return "8";
case 9: return "9";
 case 10: return "A";
 case 11: return "B";
 case 12: return "C";
 case 13: return "D";
 case 14: return "E";
 case 15: return "F";
 default :return "X";}
}

void CNumToNumDlg::OnOK()
{
 
  if(! GetNum())
  {return;}
if(IsDlgButtonChecked(IDC_RADIO2))
Shuxue();
else if(IsDlgButtonChecked(IDC_RADIO1))
Qiongjia();
else if(IsDlgButtonChecked(IDC_RADIO3))
ShuangGui();
else
AfxMessageBox("Error 1");

 

 

}
 
void Start(CNumToNumDlg *p);
CString sg2(int N,int a);
void CNumToNumDlg::Qiongjia()
{
me1("0");
me1("载入算法->穷加法\n\r");
me1("\n\r");
me1("--------------------------------------------------------------------\r\n");
me1("算法说明:该算法又叫笨方法,源自幼儿园小朋友数手指的习惯,是这个\r\n地球上最原始的算法");

x=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)Start,this,0,&y);

}

void Start(CNumToNumDlg *p)
{
p->me1("\r\n线程开辟:\r\n");
p->me1("请伸出你的指头!\r\n");

Sleep(1000);
p->me1("预备!\r\n");
p->me1("3!\r\n");
Sleep(1000);
p->me1("2!\r\n");
Sleep(1000);
p->me1("1!\r\n");
Sleep(1000);
p->me1("开始!\r\n");
 int N=p->Num;
for(int i=0;i<=p->Num;i++)
{
Sleep(10);
p->me1(sg2(N,p->JZ1)+"-   "+sg2(i,p->JZ2)+"+\r\n");
N--;
}
p->me1("\r\n线程终止:得到结果"+sg2(i-1,p->JZ2)+"\r\n");
p->me1("您算出来了吗?");
}

 

 

 

 


void CNumToNumDlg::Shuxue()
{
CString a,b,c,d;
me1("0");
me1("载入算法->数学算法\n\r");
me1("\n\r");
me1("--------------------------------------------------------------------\r\n");
me1("算法说明:一群小学生用疑惑的眼光看着你...你当然知道这...\r\n");
a.Format("%d",JZ1);
b.Format("%d",JZ2);
me1(a+"进制 转换为 "+b+"进制\r\n\r\n");
me1(m_e1+"=");
 int length=m_e1.GetLength()-1;
    for(int i=0;i<m_e1.GetLength();i++)
 {   c.Empty();
  c.Format("%d",exp(length-i,JZ1));
  char str[2]={m_e1[i],'\0'};
  me1(str);
  me1("*"+c);
  if(i<m_e1.GetLength()-1)
  me1("+");
    }
d.Format("%d",Num);
me1("\r\n获得10进制数值="+d);
me1("\r\n反向求出"+b+"进制数值=\r\n");

int Num2=Num;
 i=0;
int j=0;
d.Empty();
while(Num2)
{   c.Format("%d",Num2);
    i=Num2%JZ2;
  


    me1(c+"/"+b+"....("+abc(i)+")"+ "\r\n");
    Num2=Num2/JZ2;
 d.Insert(0,abc(i));
   


}
me1("得出"+b+"进制结果:"+d);

}

void CNumToNumDlg::ShuangGui()
{CString a,b;
a.Format("%d",Num);
me1("0");
me1("载入算法->双重递归\n\r");
me1("\n\r");
me1("--------------------------------------------------------------------\r\n");
me1("算法说明:理论上任何一个循环结构都可以简化为递归,但是\r\n不是所有的递归都可以用循环代替~^.^\r\n逐级调用自身,带入参数(数值,进制)   返回参数(字符类型结果)");
me1("\r\n该算法实质上是数学算法的递归结构\r\n\r\n");

me1("带入参数("+m_e1+","+m_c1+")\r\n"+"递归开始:求得10进制结果"+a+"\r\n");
me1("带入参数("+a+","+m_c2+")\r\n"+"递归开始:\r\n");
me1("求得结果:\r\n");
me1(sg1(Num,JZ2));

 

}

 

BOOL CNumToNumDlg::GetNum()
{   UpdateData(true);
Num=0;
JZ1=0;
JZ2=0;
int t=0;
    if(m_c1==""||m_c2=="")
 {AfxMessageBox(_T("请选择要转换的进制!"));
 return false;}
    if(m_e1=="")
    {AfxMessageBox(_T("请输入要转换的数!"));
 return false;}

    JZ1=atoi(m_c1);
 JZ2=atoi(m_c2);

    if(JZ1>16||JZ1<2||JZ2>16||JZ2<2)
 { AfxMessageBox(_T("进制超标!"));
  return false;
 }
  
 int length=m_e1.GetLength()-1;
    for(int i=0;i<m_e1.GetLength();i++)
 { 
  
  if(m_e1[i]>'F'||(m_e1[i]<'A'&&m_e1[i]>'9')||m_e1[i]<'0'){
         AfxMessageBox(_T("数值 "+m_e1+" 超标!"));
         return false;}
       
  

  switch(m_e1[i])
  { 
  case '0': if(JZ1<=0) t=1;break;
  case '1': if(JZ1<=1) t=1;break;
  case '2': if(JZ1<=2) t=1;break;
  case '3': if(JZ1<=3) t=1;break;
  case '4': if(JZ1<=4) t=1;break;
  case '5': if(JZ1<=5) t=1;break;
  case '6': if(JZ1<=6) t=1;break;
  case '7': if(JZ1<=7) t=1;break;
  case '8': if(JZ1<=8) t=1;break;
  case '9': if(JZ1<=9) t=1;break;
  case 'A': if(JZ1<=A) t=1;break;
  case 'B': if(JZ1<=B) t=1;break;
  case 'C': if(JZ1<=C) t=1;break;
  case 'D': if(JZ1<=D) t=1;break;
  case 'E': if(JZ1<=E) t=1;break;
  case 'F': if(JZ1<=F) t=1;break;
  default:AfxMessageBox(_T("Error 0"));}

        if(t==1)
  {AfxMessageBox(_T("数值大于进制!"));
      return false;}

 

 

  switch(m_e1[i])
  { 
  case '0': Num+=0*exp(length-i,JZ1);break;
  case '1': Num+=1*exp(length-i,JZ1);break;
  case '2': Num+=2*exp(length-i,JZ1);break;
  case '3': Num+=3*exp(length-i,JZ1);break;
  case '4': Num+=4*exp(length-i,JZ1);break;
  case '5': Num+=5*exp(length-i,JZ1);break;
  case '6': Num+=6*exp(length-i,JZ1);break;
  case '7': Num+=7*exp(length-i,JZ1);break;
  case '8': Num+=8*exp(length-i,JZ1);break;
  case '9': Num+=9*exp(length-i,JZ1);break;
  case 'A': Num+=A*exp(length-i,JZ1);break;
  case 'B': Num+=B*exp(length-i,JZ1);break;
  case 'C': Num+=C*exp(length-i,JZ1);break;
  case 'D': Num+=D*exp(length-i,JZ1);break;
  case 'E': Num+=E*exp(length-i,JZ1);break;
  case 'F': Num+=F*exp(length-i,JZ1);break;
  default:AfxMessageBox(_T("Error 0"));}
      
    
 }
       //CString a;
    //a.Format("%d",Num);
       //AfxMessageBox(a);
      
return true;

}

void CNumToNumDlg::me1(const char *str)
{
if(str=="0")
m_e2="";

else
m_e2+=str;
SendMessage(WM_MY_MESSAGE);


}


CString CNumToNumDlg::sg1(int N, int a)
{
CString b;
b.Empty();
if(N/a)
{b=abc(N%a);

b.Insert(0,sg1(N/a,a));
me1("获得字符:"+b+"\r\n");

return b;
}
else
{me1("递归还原:");
 me1(abc(N%a));
 me1("\r\n");
return abc(N%a);
}
}


CString sg2(int N,int a)
{
CString b;
b.Empty();
if(N/a)
{b=abc(N%a);

b.Insert(0,sg2(N/a,a));


return b;
}
else

return abc(N%a);
}

LRESULT CNumToNumDlg::OnMyMessage(WPARAM wParam, LPARAM lParam)
{UpdateData(false);
return 0;
}

void CNumToNumDlg::OnButton1()
{CaDlg a;
 a.DoModal();
 
}


⌨️ 快捷键说明

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