主题:想不明白问题在哪
今天做了一个小练习,可出现了一个想不明白的问题
题目是找出100到999之间的既是回文数且又素数的数,目标是练习VB和C++的混编
判断一个数是否是回文数,素数的函数用C++编:
1.cpp:
#include<cmath>
extern "C" __declspec(dllexport) bool __stdcall prime(int n)
{
for(int i=2;i<=n-1;i++)
if(n%i==0) return false;
return true;
}
extern "C" __declspec(dllexport) bool __stdcall huiwen(int n)
{
int t=n,m=0;
while(t)
{
m=m*10+t%10;
t/=10;
}
return(m==n);
}
1.def:
LIBRARY 1
EXPORTS
prime @1
huiwen @2
以上使用VC++ 6.0编译成1.dll
VB部分:
Form1上只有一个Combo控件
Private Declare Function huiwen Lib "1.dll" (ByVal n As Long) As Boolean
Private Declare Function prime Lib "1.dll" (ByVal n As Long) As Boolean
Private Sub Form_Load()
Me.Show
Combo1.Clear
Dim i As Long
For i = 100 To 999
If (prime(i) And huiwen(i)) Then Combo1.AddItem i
Next
End Sub
经我测试,用C++编的两个函数应该没问题,因为我建了一个C++ Win32 Console工程,编了一个main()函数测试,没有问题,但上面的程序100-500之间的数是算对了,可600以上的数就有问题了,连969,999都加到了Combo1里,我又将循环改成For i=10 To 99 算得结果又是正确的.
问题到底在哪呢
题目是找出100到999之间的既是回文数且又素数的数,目标是练习VB和C++的混编
判断一个数是否是回文数,素数的函数用C++编:
1.cpp:
#include<cmath>
extern "C" __declspec(dllexport) bool __stdcall prime(int n)
{
for(int i=2;i<=n-1;i++)
if(n%i==0) return false;
return true;
}
extern "C" __declspec(dllexport) bool __stdcall huiwen(int n)
{
int t=n,m=0;
while(t)
{
m=m*10+t%10;
t/=10;
}
return(m==n);
}
1.def:
LIBRARY 1
EXPORTS
prime @1
huiwen @2
以上使用VC++ 6.0编译成1.dll
VB部分:
Form1上只有一个Combo控件
Private Declare Function huiwen Lib "1.dll" (ByVal n As Long) As Boolean
Private Declare Function prime Lib "1.dll" (ByVal n As Long) As Boolean
Private Sub Form_Load()
Me.Show
Combo1.Clear
Dim i As Long
For i = 100 To 999
If (prime(i) And huiwen(i)) Then Combo1.AddItem i
Next
End Sub
经我测试,用C++编的两个函数应该没问题,因为我建了一个C++ Win32 Console工程,编了一个main()函数测试,没有问题,但上面的程序100-500之间的数是算对了,可600以上的数就有问题了,连969,999都加到了Combo1里,我又将循环改成For i=10 To 99 算得结果又是正确的.
问题到底在哪呢