疯猪 发表于 2009-4-18 05:49:01

程序不运行,为什么

我自己编写了一个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();};

       
}

以上程序编译运行成功!
但是计算比较小的数据还可以,如果计算大数就自动关闭了,不知道怎样解决,谢谢!

gxqcn 发表于 2009-4-18 18:41:05

我没有运行你的程序,
但仅从阅读你的代码就发现了症结所在,
应该是的算法问题,因为你在最后采用了递归,
当递归层数过深时,耗尽了程序的栈空间而自动关闭。

所以,解决方法是改进你的算法,
尽可能消除递归。

疯猪 发表于 2009-4-19 03:49:22

谢谢,学习中,
求改进算法
不反复查询与测试,如何解决问题?
页: [1]
查看完整版本: 程序不运行,为什么