求95858的下一个对称数
所谓的对称数就是从左读从右读是一样的
我写了一个。但自己觉得别扭,不知大家能否指点一下(对了,这个是电脑报30期的题目—)
#include"studio.h"
main()
int i,ii,ih,it,iT,im;/*用来表示个十百千万为上的数值 .*/
int tmp;/*路程 */
float speed;/*速度 */
{for (i=95859;i<100000;i++) /*估计其数值小于100000*/
{ii=i%10;
it=i%100-ii;
ih=i%1000-it-ii;
iT=i%10000-ih-it-ii;
im=i/10000;
if im=ii&&it=iT
tmp=i;
break;
}
speed=tmp/2;
printf("long:%dspeed%f/n",tmp,speed);
}
问题点数:20、回复次数:4Top
1 楼LoveYouJustOneDay(哈哈)回复于 2005-08-03 21:27:59 得分 4
这个效率非常低
先设计一个函数 f(n) 得到从 1 开始的第 n 个回文数的字符串(有通项公式)
用增倍查找法确定 95859 的下标号 即 f(x) = "95859"
然后直接 输出f(x+1)
Top
2 楼jiajun2001(Jagen(嘉俊))回复于 2005-08-03 22:06:53 得分 8
这个其实比较简单
你会发现有这样一个特点
95859
95959
96069
96169
96269
96369
也就是说你只需递增从左2,3位就可以了,将1,2位换位后放在后面就可以了
代码如下
#include <stdio.h>
int main( int argc, char *argv[] )
{
int i = 58;
char num[6] = {0};
for ( ;i < 100; i++ )
{
sprintf( num, "9%d", i );
num[4] = num[0];
num[3] = num[1];
printf( "%s\n", num );
}
return 0;
}
Top
3 楼jiajun2001(Jagen(嘉俊))回复于 2005-08-03 22:08:30 得分 0
这个求出了95859,及其以后的直到100000的所有对称数。Top
4 楼qingyuan18(zealot_tang)回复于 2005-08-03 22:29:02 得分 8
for(int i=95895;;i++)
{
int flag = 0;
char tmp[10];
itoa(i,tmp,10);
int len = strlen(tmp);
for(int i=0;i<len/2;i++)
{
if(*(tmp+i) != *(tmp+len-i-1))
{
flag = 1;
break;
}
}
if(flag == 0)
{
printf("the next nummber after 95859 is %d",i);
break;
}
}Top




