作者DiLegend (JOU)
看板C_and_CPP
标题[问题] 不知错在哪 有时程式会跑不完
时间Wed Mar 11 23:59:23 2009
如题
题目是要将非质数的数字
换一个位置然後相加
直到变成质数
如85-->58
(1)85+58=143
(2)143+431=574
(3)574+745=1319
输入十位以上数字都OK
质数也都OK
但像输入2就爆了
有请版上神人解惑
#include<iostream>
using namespace std;
int main(void){
unsigned long a,b,c,timeI,N,temp,pro=0,p,num=0,che;
while(cin>>a){
timeI=0;
int i=1;
c=0;
while(i)
{
for(N=1;N<=a;N++) //我是用很笨的方法确认是否为质数
{if((N*N)>=a)
{break;}
else if((N*N)<a)
{continue;}
}
if(a<10)
pro=a;
b=a;
for(num=0;a>10;num++)
{a=a/10;}
for(che=2;che<=N;che++)
{if((b%che)!=0)
{i=0;
continue;
}
else if((b%che)==0)
{i=1;
break;
}
}
if(i==1)
{temp=1;
for(p=0;p<=num;p++)
{temp=temp*10;
}
if(pro>0)
{c=pro+pro;}
if(pro<=0)
{c=b*10-(a*temp)+a;
c+=b;
}
a=c;
timeI++;
}
if(i==0)
{ a=b;
break;}
} // i那的
cout<<timeI<<" "<<a<<" "<<N<<" "<<i<<endl;
}
system("pause");
return 0;
}
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 118.168.98.64
1F:→ snowlike:while(i=1) + 条件式break = 容易有例外情况而跑不完 03/12 01:00