程序不运行,为什么
我自己编写了一个MFC应用程序 ,界面很简单,有4个edit,edit1输入目标数,比如39,edit2输入扫描起点,比如5。点击按钮,寻找比5大的39的素因子。如果找到了,edit3与edit4给予提示。其中edit3显示0,edit4显示“结束了”;实际上,edit3是edit1与edit2取模得到的。edit4是简单的判断与显示,对程序没什么本质作用。程序首先有一些头文件,#include <iostream.h>
#include <string.h>//¿éòÔê1óÃstringààDí
#include "../Include/HugeCalc.h" // 1«12½ó¿ú
#include "../Include/HugeInt.h" // 10½øÖÆÏμí3
#include "../Include/HugeIntX.h" // 16½øÖÆÏμí3
#pragma message( "automatic link to ../Lib/HugeCalc.lib" )
#pragma comment( lib, "../Lib/HugeCalc.lib" )
#if 1
#define _Test_HI
#define integer CHugeInt
#else
#define _Test_HX
#define integer CHugeIntX
#endif
而后对按钮进行遍写代码如下:
void my2::OnButton1()
{
// TODO: Add your control notification handler code here
//读取edit2的数,找到下一个素数,在edit2中显示
CString str;
GetDlgItemText(IDC_EDIT2,str);
CHugeInt hugePrime((UINT32) 1 );
hugePrime=str;
hugePrime.NextPrime(hugePrime);
GetDlgItem(IDC_EDIT2)->SetWindowText((LPCTSTR)hugePrime);
// 读取edit1,edit2的数,求出模,在edit3中显示
CString str1,str2;
CHugeInt testnumber1((UINT32) 1 );
CHugeInt testnumber2((UINT32) 1 );
CHugeInt testnumber3((UINT32) 1 );
GetDlgItemText(IDC_EDIT1,str1);
testnumber1=str1;
GetDlgItemText(IDC_EDIT2,str2);
testnumber1=str1;
testnumber2=str2;
testnumber3=testnumber1%testnumber2;
GetDlgItem(IDC_EDIT3)->SetWindowText((LPCTSTR)testnumber3);
CString strtest;
GetDlgItemText(IDC_EDIT3,strtest);
// 判断edit3是否为0,是就结束,不是就重复
if (strtest=="0") {GetDlgItem(IDC_EDIT4)->SetWindowText("结束了");} else {OnButton1();};
}
以上程序编译运行成功!
但是计算比较小的数据还可以,如果计算大数就自动关闭了,不知道怎样解决,谢谢! 我没有运行你的程序,
但仅从阅读你的代码就发现了症结所在,
应该是的算法问题,因为你在最后采用了递归,
当递归层数过深时,耗尽了程序的栈空间而自动关闭。
所以,解决方法是改进你的算法,
尽可能消除递归。 谢谢,学习中,
求改进算法
不反复查询与测试,如何解决问题?
页:
[1]