| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1930 人关注过本帖
标题:回文数的解法
只看楼主 加入收藏
lirunlaibin
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2007-5-26
收藏
 问题点数:0 回复次数:11 
回文数的解法
  若一个数(首位不为零)从左到右读与从右到左读都是一样,我们就将其称之为回文数。例如:给定一个10进制数56,将56加65(即把56从右向左读),得到121是一个会文数。又如,对于10进制数87:
    STEP1:87+78=165 STEP2:165+561=726
    STEP3:726+627=1353 STEP4:1353+3531=4884
  在这里的一步是指进行了一次N进制的加法,上例最少用了4步得到回文数4884。
  写一个程序,给定一个N(2<=N<=10,N=16)进制数M,求最少经过几步可以得到回文数。如果在30步以内(包含30步)不可能得到回文数,则输出"Impossible!"
样例:
INPUT
N=9 M=87
OUTPUT
STEP=6
#include "stdio.h"
#include "string.h"
long qiuhe(int n,long a,long b)
{
long t=0;
if (n==10)return a+b;
while(a||b)
{
if(a%10+b%10>=n)t+=(a%10+b%10)/n;
t=t*10+((a%10+b%10)%n);
a/=10;
b/=10;
}
a=t;
t=0;
while(a)
{
if(a%10>=n)t+=a/n;
t=t*10+a%10%n;
a/=10;
}
return t;
}
long qufan(long m)
{
long n=0;
while(m)
{
n=n*10+m%10;
m=m/10;
}
return n;
}
long huiwen(long n,long m)
{
long a=m,b,i=0;
l: i++;
b=qufan(m);
m=qiuhe(n,a,b);
if (m==qufan(m))return i;
a=m;
goto l;
}
dongrunlai(int n,long m)
{
while(m)
{
if(m%10>=n)return 0;
m=m/10;
}
return 1;
}
void main()
{
long m;
int n;
printf("please into bit (2-10):");
scanf("%d",&n);
printf("please into one number ");
printf("%d",n);
printf("bite number :");
scanf("%d",&m);
if(donrunlai(n,m))
{printf("xu yao de ci su :");
printf("%d\n",huiwen(n,m)-2);}
else printf("err into number!\n");
}
哪错了呢?想不通!!指点一下!!!
搜索更多相关主题的帖子: 回文 解法 
2007-06-05 11:10
I喜欢c
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:64
帖 子:1749
专家分:0
注 册:2007-3-2
收藏
得分:0 



有这么难吗?

 我是指针,却丢失了目标地址!          我是循环,却缺少了结束条件!      我是函数,却没有人来调用!   
2007-06-05 12:56
lirunlaibin
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2007-5-26
收藏
得分:0 
那你做一下看啊,顺便给我教一下呵呵!!

[此贴子已经被作者于2007-7-10 19:10:59编辑过]



在C语言的浩瀚海洋里畅游是那么的爽,我要用C编出我精彩的人生!
2007-06-05 18:14
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
这个是一到ACM题目吧.看过.简单的.对每一个数做数组保存其每一位,看是否回文,若是结束,否则继续做相加.直到出现回文或者是次数到30.

倚天照海花无数,流水高山心自知。
2007-06-05 21:58
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
直接用字符串来接收数字可以省掉做数转换操作.最多循环30次,效率上应该可以A.同时也可以不用考虑数据会溢出的可能.
不过这样的话就得做一个字符串的加法的函数.

倚天照海花无数,流水高山心自知。
2007-06-05 22:03
lirunlaibin
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2007-5-26
收藏
得分:0 
C高手们,帮小弟弄一下这个题,小弟不会了!!

在C语言的浩瀚海洋里畅游是那么的爽,我要用C编出我精彩的人生!
2007-07-06 22:00
huangfengchu
Rank: 1
等 级:新手上路
威 望:2
帖 子:274
专家分:0
注 册:2007-5-22
收藏
得分:0 
写一个程序,给定一个N(2<=N<=10,N=16)进制数M,到底N是进制数,还是M?应该这样说明吧?N(2<=N<=10||N=16),N进制数吧?M是给定的被转换数?

深山苦学C语言,终年不见外面世界。
2007-07-06 23:10
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
N 进制下的数M.
10进制下的数65.

倚天照海花无数,流水高山心自知。
2007-07-06 23:12
huangfengchu
Rank: 1
等 级:新手上路
威 望:2
帖 子:274
专家分:0
注 册:2007-5-22
收藏
得分:0 
就是给定一10进制数,转换成N进制M,判断是否回文,如不是把M倒置相加,继续判断,直到符合为止.多出三十步就退出打印错误,否则,返回N步数,理解对了吧.

深山苦学C语言,终年不见外面世界。
2007-07-06 23:25
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
不需要转换成10进制做,可以直接做,可以省事.

倚天照海花无数,流水高山心自知。
2007-07-06 23:44
快速回复:回文数的解法
数据加载中...
 
   



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

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