标题:[求助]这是一个关于回数的程序,是我们的作业 ,可是却做不出来
只看楼主
qq95620412
Rank: 1
等 级:新手上路
帖 子:81
专家分:0
注 册:2007-11-5
得分:0 
1-1000000000以内的回文数应该有
90000+9000+9000+900+900+90+90+9+9
=109998个

看来是不多

人生路难走,转眼已白头。伤心望远山,黯然下小楼。
2007-11-08 15:30
永夜的极光
Rank: 6Rank: 6
等 级:贵宾
威 望:27
帖 子:2721
专家分:1
注 册:2007-10-9
得分:0 
我的电脑从0数到9999居然要3秒半。。。。


从BFS(Breadth First Study)到DFS(Depth First Study)
2007-11-08 15:46
cosdos
Rank: 9Rank: 9Rank: 9
来 自:ShangHai
等 级:蜘蛛侠
威 望:6
帖 子:2109
专家分:1385
注 册:2007-6-19
得分:0 
以下是引用永夜的极光在2007-11-8 15:46:57的发言:
我的电脑从0数到9999居然要3秒半。。。。

//---------------------------------------------------------------------------


DEV-C++


[此贴子已经被作者于2007-11-8 15:59:59编辑过]



0m26Zj1Z.png (7.31 KB)

—>〉Sun〈<—
2007-11-08 15:57
永夜的极光
Rank: 6Rank: 6
等 级:贵宾
威 望:27
帖 子:2721
专家分:1
注 册:2007-10-9
得分:0 
刚才的3.59s是vc6的,我用dev-cpp跑了一次,3.2s

这个电脑还真不是一般的慢。。。

从BFS(Breadth First Study)到DFS(Depth First Study)
2007-11-08 16:09
qq95620412
Rank: 1
等 级:新手上路
帖 子:81
专家分:0
注 册:2007-11-5
得分:0 

我跑完用了7秒多。


人生路难走,转眼已白头。伤心望远山,黯然下小楼。
2007-11-08 16:45
Eastsun
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:32
帖 子:802
专家分:0
注 册:2006-12-14
得分:0 
你们可以将结果导入到一个txt文件,而不是在控制台上打印出来:
比如程序名是 prime.exe
可以这样运行:
prime >out.txt
这样时间主要花在计算上面,可以检验程序的效率了.


1-1000000000以内的回文数应该有
90000+9000+9000+900+900+90+90+9+9
=109998个

看来是不多

这个数字至少还可以减少3/4

My BlogClick Me
2007-11-08 17:16
chmlqw
Rank: 1
等 级:新手上路
帖 子:180
专家分:0
注 册:2007-10-11
得分:0 

19楼:

int main(void)
{
long int data=MIN;
while(data<=MAX)
{
if(sushu(data))
{
printf("%ld\n",data); /* 你的程序,相当于只判断了最后一个素数是不是回文吧... */
data=nexthuiwen(data);
}
}
return 0;
}

2007-11-08 17:41
qq95620412
Rank: 1
等 级:新手上路
帖 子:81
专家分:0
注 册:2007-11-5
得分:0 
回27楼:

你写的和我的程序不一样哦。

能把眼睛擦亮一点吗?

差点被你骗了。

[此贴子已经被作者于2007-11-8 19:03:08编辑过]


人生路难走,转眼已白头。伤心望远山,黯然下小楼。
2007-11-08 19:00
qq95620412
Rank: 1
等 级:新手上路
帖 子:81
专家分:0
注 册:2007-11-5
得分:0 
回27楼:

按照你的写法,会进入死循环的。

人生路难走,转眼已白头。伤心望远山,黯然下小楼。
2007-11-08 19:05
qq95620412
Rank: 1
等 级:新手上路
帖 子:81
专家分:0
注 册:2007-11-5
得分:0 

修正了一下

在DEV C++4.9.9.2 中运行通过, 花了 4.0000秒。

#include<stdio.h>
#include<math.h>
#include<time.h>

#define MAX 1000000000
#define MIN 3

long int pow10(int i)
//因为DEV C++中的math.h没有 pow10函数,所以现编了一个
//输入:int型整数
//输出:返回10的该整数次幂,返回类型为long int。
{
long int result=1;
while(i>0)
{
result*=10;
i--;
}
return result;
}

long int nexthuiwen(long int currenthuiwen)
//输入:一个回文数
//输出:比当前回文数大的最小回文数
{
long int i=currenthuiwen,m;
int weishu=0; //数字的位数
long int j=0;
// printf("当前回文数是:%ld\n",i);

while(i>0) //求出数值的位数
{
i=i/10;
weishu+=1;
}

if(weishu==1) //求出规整前的新数
{
currenthuiwen+=1;
}
else
{
currenthuiwen+=pow10(weishu/2);
currenthuiwen=currenthuiwen-currenthuiwen%pow10(weishu/2);
}
// printf("新数为:%ld\n",currenthuiwen);

i=currenthuiwen; //求出规整前数值的位数
weishu=0;
while(i>0)
{
i=i/10;
weishu+=1;
}

for(j=1;j<=weishu/2;j++) //规整新数
{
m=currenthuiwen/(long int)pow10(weishu-j)%10*(long int)pow10(j-1);
// printf("%ld\n",m);
currenthuiwen+=m;
}
// printf("新的回文数是: %ld\n",currenthuiwen);
return currenthuiwen;
}


int sushu(long int data)
//输入:任意长整数
//输出:若该整数为素数,则输出1,否则输出0
{
long int end=(long int)sqrt(data);
long int i;
for(i=2;i<=end;i++)
{
if(data%i==0)return 0;
}
return 1;
}


int main(void)
{
long int data=MIN;
clock_t start,end;
start=clock();
while(data<=MAX)
{
if(sushu(data)) printf("%ld\n",data);
data=nexthuiwen(data);
}
end=clock();
printf("%lf\n",(double)((end-start)/CLOCKS_PER_SEC));
return 0;
}


人生路难走,转眼已白头。伤心望远山,黯然下小楼。
2007-11-08 19:09



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-184219-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.152905 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved