您的位置:首页 > 编程语言 > C语言/C++

求任意范围内回文素数c++解决方案(解决了地址释放的问题,附错误原因简述)

2016-05-07 17:06 246 查看
#include <iostream>
using namespace std;

int Judge(int m)
{

int J_opnum,BOOL=0;
int J_flag=1;
for(J_flag=0,J_opnum=(m/2);J_opnum>1;J_opnum--)
{
if((m%J_opnum)==0) J_flag+=1;
}
if(J_flag<=1)
{
BOOL=1;
}return BOOL;
}

int size(int m)
{
int s_flag,s_opnum;
s_opnum=m/10;
s_flag=1;
for(;s_opnum>0;s_flag++)
{
s_opnum=s_opnum/10;
}
return s_flag;
}

void main()
{
int Room,m_opnum,m_size,SZ,SN,pd,top,lop,judg;
cout<<"请输入搜索回文素数的范围:1~";
cin>>Room;
for(m_opnum=Room;m_opnum>=9;m_opnum--)//认为个位素数不是回文素数
{
if(Judge(m_opnum)==0) continue;
m_size=size(m_opnum);
pd=m_opnum;
int*SeeBit=new int[m_size];
for(SZ=0;SZ<=(m_size);SZ++)
{
SeeBit[SZ]=pd%10;
pd/=10;
}//此时,这个整数的最低位存在0,最高位存在m_size-1
SZ=m_size-1;
for(top=0,lop=SZ,judg=0;top<=(lop-1);top++,lop--)
{
if(SeeBit[top]!=SeeBit[lop])
{
judg=0;
break;
}
judg=1;
}
if(judg==1) cout<<m_opnum<<endl;
    /*delete[]SeeBit;SeeBit被delete 后,SeeBit的值不会改变,还是原来的值,但不能再使用SeeBit指向的内存了,程序刚好在这里没有出错,但这时SeeBit指向的这块内存已经不属于程序的内存,如果其它的程序申请内存时也申请到了这块内存,你再对SeeBit的内存进行操作是危险的,因为你在改变其他程序的内存值。因此由于本程序是从大到小申请地址空间,所以每次申请时,因为SeeBit的地址并没有变化,所以只是在重复利用第一次SeeBit所申请的地址,不存在占用系统静态内存的问题。至于输入一亿以上会溢出,是因为超出了编译器系统可以向计算机系统申请的最大内存(windows不会允许vs申请过大的地址)并不是语法错误。对于本程序,在输出后会自动退出,申请的内存会自动消除,所以即使不delete也是安全的*/

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: