怎么转进制?懵了。

P1015 [NOIP1999 普及组] 回文数

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为底


| 下一页