回文数问题

Jeecy_Chen Jeecy_Chen 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区

给定一个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();
}
...全文

相关推荐

C++回文数及素数问题计算方法

主要介绍了C++回文数及素数问题计算方法,可实现一定范围内的素数与回文数运算功能,涉及C++字符串遍历与数字数学运算的相关技巧,需要的朋友可以参考下

weixin_38522636

解决Python中回文数和质数的问题

今天小编就为大家分享一篇解决Python中回文数和质数的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

weixin_38555019

Python编程:鸡蛋掉落问题和回文数问题

鸡蛋掉落问题是一个经典的计算机科学问题,而回文数问题则是一个常见的数学问题。在本文中,我将为您提供关于这两个问题的详细解释,并附上相应的Python代码示例。鸡蛋掉落问题是一个经典的计算机科学问题,而回文数问题则是一个常见的数学问题。在本文中,我将为您提供关于这两个问题的详细解释,并附上相应的Python代码示例。这个问题是一个常见的数学问题,可以通过将整数转换为字符串并比较正向和反向的字符串来解决。这个问题是一个常见的数学问题,可以通过将整数转换为字符串并比较正向和反向的字符串来解决。

代码快速拳

《C语言学习与应用》程序设计参考-回文数问题.docx

《C语言学习与应用》程序设计参考-回文数问题.docx

xinkai1688

java的回文数问题

/4.回文数。 //编写一个Java应用程序。用户从键盘输入一个1—9999之间的数,程序将判断这个数是几位数,并判断这个数是否是回文数。 //回文数是指将该数含有的数字逆序排列后得到的数和原数相同,例如12121、3223都是回文数。

燎原之火
评论
收藏 已收藏
分享
返回顶部
Jeecy_Chen
C语言 70,040 成员 243,237 内容