0分……全WA了

P1015 [NOIP1999 普及组] 回文数

Phigros_Guest @ 2023-08-30 09:12:35

代码如下,码风将就

#include<bits/stdc++.h>
using namespace std;
int n,len,ans;
char m1[131],m2[131],m3[131];
bool pd()//回文数判断
{
    for(int i=1;i<=len/2;i++) if(m1[i]!=m1[len-i+1]) return false;
    return true;
}
void hplus()//高精度加法
{
    for(int i=1;i<=len;i++) m2[i]=m1[len-i+1];//倒转加数
    for(int i=1;i<=len;i++)
    {
        m3[i]=m1[i]+m2[i];
        if(m3[i]>=n) m3[i+1]++,m3[i]-=n;//处理进位
    }
    if(m3[len+1]) len++;
    for(int i=1;i<=len;i++) m1[i]=m3[i];//把和覆盖到下一个加数
    return;
}
int main()
{
    cin>>n>>m1;//输入
    len=strlen(m1);//求位数
    for(int i=1;i<=len;i++)//将ASCII码化成数
    {
        if(m1[i]>='0'&&m1[i]<='9') m1[i]-='0';
        else m1[i]=m1[i]-'A'+10;
    }
    while(!pd())//不回文就一直循环
    {
        ans++;
        if(ans>30)//超30步直接结束
        {
            cout<<"Impossible!"<<endl;
            return 0;
        }
        hplus();
    }
    cout<<"STEP="<<ans;//输出
    return 0;
}

by xiazha @ 2023-08-30 09:22:02

@Phigros_Guest m1,m2,m3都应该定义成int


by xiazha @ 2023-08-30 09:22:53

你可以新开一个char用来存输入


by Phigros_Guest @ 2023-08-30 09:24:16

@xiazha ?一定不是这样,len=strlen(m1);必须字符串,将ASCII码化成数已经解决了


by Phigros_Guest @ 2023-08-30 09:25:21

@xiazha 我逝逝


by Phigros_Guest @ 2023-08-30 09:28:07

@xiazha 仍然WA

#include<bits/stdc++.h>
using namespace std;
int n,len,ans;
char m[101];
int m1[131],m2[131],m3[131];
bool pd()//回文数判断
{
    for(int i=1;i<=len/2;i++) if(m1[i]!=m1[len-i+1]) return false;
    return true;
}
void hplus()//高精度加法
{
    for(int i=1;i<=len;i++) m2[i]=m1[len-i+1];//倒转加数
    for(int i=1;i<=len;i++)
    {
        m3[i]=m1[i]+m2[i];
        if(m3[i]>=n) m3[i+1]++,m3[i]-=n;//处理进位
    }
    if(m3[len+1]) len++;
    for(int i=1;i<=len;i++) m1[i]=m3[i];//把和覆盖到下一个加数
    return;
}
int main()
{
    cin>>n>>m;//输入
    len=strlen(m);//求位数
    for(int i=1;i<=len;i++)//将ASCII码化成数
    {
        if(m[i]>='0'&&m[i]<='9') m1[i]=m[i]-'0';
        else m1[i]=m[i]-'A'+10;
    }
    while(!pd())//不回文就一直循环
    {
        ans++;
        if(ans>30)//超30步直接结束
        {
            cout<<"Impossible!"<<endl;
            return 0;
        }
        hplus();
    }
    cout<<"STEP="<<ans;//输出
    return 0;
}

by xiazha @ 2023-08-30 09:35:46

@Phigros_Guest 你码换数的时候要把数组反过来,比如输入114514,你要把它变成415411,这样才符合你后面的代码实现


by xiazha @ 2023-08-30 09:37:37

@Phigros_Guest 还有,char0 开始存,你for循环应该从0到len-1


by xiazha @ 2023-08-30 09:39:58

#include<bits/stdc++.h>
using namespace std;
int n,len,ans;
char m[101];
int m1[131],m2[131],m3[131];
bool pd()//回文数判断
{
    for(int i=1;i<=len/2;i++) if(m1[i]!=m1[len-i+1]) return false;
    return true;
}
void hplus()//高精度加法
{
    for(int i=1;i<=len;i++) m2[i]=m1[len-i+1];//倒转加数
    for(int i=1;i<=len;i++)
    {
        m3[i]=m1[i]+m2[i];
        if(m3[i]>=n) m3[i+1]++,m3[i]-=n;//处理进位
    }
    if(m3[len+1]) len++;
    for(int i=1;i<=len;i++) m1[i]=m3[i];//把和覆盖到下一个加数
    return;
}
int main()
{
    cin>>n>>m;//输入
    len=strlen(m);//求位数
    for(int i=0;i<len;i++)//将ASCII码化成数
    {
        if(m[i]>='0'&&m[i]<='9') m1[len-i]=m[i]-'0';
        else m1[len-i]=m[i]-'A'+10;
    }
    while(!pd())//不回文就一直循环
    {
        ans++;
        if(ans>30)//超30步直接结束
        {
            cout<<"Impossible!"<<endl;
            return 0;
        }
        hplus();
    }
    cout<<"STEP="<<ans;//输出
    return 0;
}

浅改了一下,还是有地方出错了,我再看看


by Phigros_Guest @ 2023-08-30 09:48:31

仍然0分

#include<bits/stdc++.h>
using namespace std;
int n,len,ans;
char m[101];
int m1[131],m2[131],m3[131];
bool pd()//回文数判断
{
    for(int i=1;i<=len/2;i++) if(m1[i]!=m1[len-i+1]) return false;
    return true;
}
void hplus()//高精度加法
{
    for(int i=1;i<=len;i++) m2[i]=m1[len-i+1];//倒转加数
    for(int i=1;i<=len;i++)
    {
        m3[i]=m1[i]+m2[i];
        if(m3[i]>=n) m3[i+1]++,m3[i]-=n;//处理进位
    }
    if(m3[len+1]) len++;
    for(int i=1;i<=len;i++) m1[i]=m3[i];//把和覆盖到下一个加数
    return;
}
int main()
{
    cin>>n>>m;//输入
    len=strlen(m);//求位数
    for(int i=1;i<=len;i++)//将ASCII码化成数
    {
        if(m[i]>='0'&&m[i]<='9') m1[len-i+1]=m[i]-'0';
        else m1[len-i+1]=m[i]-'A'+10;
    }
    while(!pd())//不回文就一直循环
    {
        ans++;
        if(ans>30)//超30步直接结束
        {
            cout<<"Impossible!"<<endl;
            return 0;
        }
        hplus();
    }
    cout<<"STEP="<<ans;//输出
    return 0;
}

|