gold_boy_hetao @ 2024-07-17 21:41:00
大佬们救命呀!我要发癫了!!不会转进制呀!!!
#include <iostream>
using namespace std;
bool hw(int x)
{
int y = x,ans = 0;
while (y > 0)
{
ans *= 10;
ans += y % 10;
y /= 10;
}
if (x == ans)
return true;
else
return false;
}
int dgl(int x)
{
int ans = 0;
while (x > 0)
{
ans *= 10;
ans += x % 10;
x /= 10;
}
return ans;
}
int main()
{
int n,m;
cin >> n >> m;
for (int i = 1;i <= 30;i++)
{
int o = dgl(m);
if (hw(o + m))
{
cout << "STEP=" << i;
return 0;
}
}
cout << "Impossible!";
return 0;
}
菜鸡一枚,多多关照......
by Zhenghw @ 2024-07-17 22:08:17
这题是高精度,你直接用int做可能不行
by Zhenghw @ 2024-07-17 22:09:22
存在数组里,然后直接做n进制加法
by Zhenghw @ 2024-07-17 22:12:05
给你看看我的代码吧
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
const int N=205;
int i,n,l;
char a[N],b[N];
inline void transform(char &c){ //数字转字符
isupper(c)?c-=55:c-='0';
}inline bool check(char *a){ //判断是否是回文数
for(int i=0;i<l>>1;i++)
if(a[i+1]!=a[l-i])
return false;
return true;
}inline void add(char *a,char *b){ //n进制高精度加法
memcpy(b,a,l+1<<2); //复制
reverse(a+1,a+l+1); //反转
//以下是n进制加法
for(int i=1;i<=l;i++)
a[i]+=a[i-1]/n+b[i],a[i-1]%=n;
if(a[l+1]+=a[l]/n) a[l++]%=n;
}int main(){
cin>>n>>a+1;
l=strlen(a+1);
reverse(a+1,a+l+1);
for(i=1;i<=l;i++)
transform(a[i]);
for(i=0;i<31;i++){
if(check(a))
break;
else add(a,b);
}if(i!=31) cout<<"STEP="<<i; //30步以内
else cout<<"Impossible!";
return 0;
}
by Zhenghw @ 2024-07-17 22:12:42
需要注意的是16进制转字符是大写
by Zhenghw @ 2024-07-17 22:13:00
@gold_boy_hetao
by Zhenghw @ 2024-07-17 22:14:15
额,上面注释有一处错误,改成字符转数字。
by gold_boy_hetao @ 2024-07-18 21:41:44
@Zhenghw 不愧是大佬,我一个字都看不懂。虽然我学四年半编程了......
by Zhenghw @ 2024-07-18 21:55:51
emmm……
by Zhenghw @ 2024-07-18 21:56:46
@gold_boy_hetao 如果你是高精度加法不懂 传送门
by Zhenghw @ 2024-07-18 21:57:33
我们一般使用十进制数,也就是以10为底