| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1940 人关注过本帖
标题:回文数的解法
取消只看楼主 加入收藏
lirunlaibin
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2007-5-26
收藏
 问题点数:0 回复次数:2 
回文数的解法
  若一个数(首位不为零)从左到右读与从右到左读都是一样,我们就将其称之为回文数。例如:给定一个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
lirunlaibin
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2007-5-26
收藏
得分:0 
那你做一下看啊,顺便给我教一下呵呵!!

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



在C语言的浩瀚海洋里畅游是那么的爽,我要用C编出我精彩的人生!
2007-06-05 18:14
lirunlaibin
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2007-5-26
收藏
得分:0 
C高手们,帮小弟弄一下这个题,小弟不会了!!

在C语言的浩瀚海洋里畅游是那么的爽,我要用C编出我精彩的人生!
2007-07-06 22:00
快速回复:回文数的解法
数据加载中...
 
   



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

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