回文数问题

Jeecy_Chen 2012-05-31 10:27:09

给定一个N进制正整数,把它的各位数字上数字倒过来排列组成一个新数,然后与原数相加,如果是回文数则停止,如果不是,则重复这个操作,直到和为回文数为止。

如果N超过10,使用英文字母来表示那些大于9的数码。例如对16进制数来说,用A表示10,用B表示11,用C表示12,用D表示13,用E表示14,用F表示15。

例如:10进制87则有:

STEP1: 87+78=165

STEP2: 165+561=726

STEP3: 726+627=1353

STEP4: 1353+3531=4884

编写一个程序,输入N(2<=N<=16)进制数M(1<=M<=30000(10进制)),输出最少经过几步可以得到回文数。如果在30步以内(含30步)不可能得到回文数,则输出0。输入的数保证不为回文数。

【输入】

第一行一个整数L,代表输入数据的组数。

接下来L行,每行两个整数N,M

【输出】

输出L行,对于每个数据组,按题目要求输出结果,并占一行。


代码如下,有错误,求大侠帮忙修改~


#include <iostream>
#include <fstream>
#include <string>
using namespace std;
ifstream fin("1003.in");
ofstream fout("1003.out");
int n,zheng[10000],fan[10000],he[10002],ls; //这里为了保险数组开到了10000,实际100就够了。
int step=0; //步数
string s;
void init()
{
int i;
for(i=0;i<10000;i++)
{
he[i]=-1;
zheng[i]=-1;
fan[i]=-1;
} //赋初值,0也可以。
he[10000]=-1;
he[10001]=-1;
fin>>n;
fin>>s;
ls=s.length();
for(i=0;i<ls;i++)
{
if(n>10&&s[i]>='A')
zheng[ls-1-i]=s[i]-'A'+10; //对于16进制:-'A'+10
}
else
zheng[ls-1-i]=s[i]-'0'; //对于10进制以下直接-'0'。

}
void jia(int zheng[],int fan[]) //函数实现高精度加,并记录当前长度,ls为长度。
{
int i,jinwei=0;
for(i=0;i<ls;i++)
{
he[i]=zheng[i]+fan[i]+jinwei;
if(he[i]>=n)
{
he[i]-=n;
jinwei=1;
}
else jinwei=0;
}
he[ls]+=jinwei;
for(i=0;i<=ls+1;i++)
{
if(he[i]==-1)
{
if(he[i-1]==0)
he[i-1]=1;
ls=i;
break;
}
}
}
int huiwen() //这里用一个函数来判断当前和是否为回文数。
{
int i;
for(i=0;i<ls;i++)
if(he[i]!=he[ls-i-1])
return(1); //如果不是返回1
return(0); //如果是返回0
}
void solve()
{
int flag=0,j;
for(j=0;j<ls;j++)
if(zheng[j]!=zheng[ls-j-1])
{
flag=1;
break;
}
if(flag==0)
{
fout<<0;
return; //此为判断输入的数是否为回文
}
if(flag==1)
flag=0;
while(1)
{
step++;
if(step>30)
{
fout<<"Impossible!";
return;
} //30步若不能实现打印Impossible!。
for(j=0;j<ls;j++)
fan[j]=zheng[ls-j-1];
jia(zheng,fan); //高精度加
flag=huiwen(); //判断是否为回文
if(flag==0)
{
fout<<step;
return;
}
if(flag==1)
flag=0;
for(j=0;j<ls;j++)
zheng[j]=he[j]; //将当前的和赋值为下一次的正序的加数
for(j=ls;j<1000;j++)
zheng[j]=-1; //还原
}
}
int main()
{
init();
solve();
}
...全文
379 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧