My Blog→" target="_blank">Click Me
[此贴子已经被作者于2007-11-8 9:09:15编辑过]
5分钟?
那不300seconds了?
[此贴子已经被作者于2007-11-8 9:10:51编辑过]
花了四个小时,编出来了
#include<stdio.h>
#include<math.h>
#define MAX 1000000000
#define MIN 3
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+=(long int)pow10(weishu/2);
currenthuiwen=currenthuiwen-currenthuiwen%(long int)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;
while(data<=MAX)
{
if(sushu(data)) printf("%ld\n",data);
data=nexthuiwen(data);
}
return 0;
}
在turboc++3.1中运行通过
时间我没算,在我的 电脑上跑了分把钟。
[此贴子已经被作者于2007-11-8 15:06:22编辑过]
/* 下面是生成一个9位的奇数回文数的程序,使用数字的,没有使用 数组 */
#include <stdio.h>
int main(void)
{
int d1,
d2,
d3,
d4,
d5,
palindrome = 0;
int n = 0;
for(d1 = 1; d1 <= 9; d1+=2)
for(d2 = 0; d2 <= 9; d2++)
for(d3 = 0; d3 <= 9; d3++)
for(d4 = 0; d4 <= 9; d4++)
for(d5 = 0; d5 <= 9; d5++)
{
++n;
palindrome = 100000000 * d1 +
10000000 * d2 +
1000000 * d3 +
100000 * d4 +
10000 * d5 +
1000 * d4 +
100 * d3 +
10 * d2 +
1 * d1;
printf("%d\n", palindrome);
//getchar();
}
printf("%d\n", n);
getchar();
return 0;
}
[此贴子已经被作者于2007-11-10 0:01:36编辑过]