• 【洛谷p1015】【一本通p1309】回文数(noip1999)


    过了这个题灰常灰常开心

    好像前两道忘记了传送门:

    回文数【传送门】

    洛谷算法标签:

    其实还有高精度


    这个题困死在了十六进制,后来想了想,我们在c[i]中存入一个大于十的数之前的程序也可以实现回文(11=11嘛),所以加了个n=16时的特判:

    利用强制类型转化把ABCDEF转化成10,11,12,13,14,15接着进行程序。

    int tp()
    {
        for(int i=0;i<=len-1;i++)
        {
            if(m[i]>=65){int e=m[i]-55;a[len-i]=e;}
        else a[len-i]=m[i]-48;
        }
        for(int i=0;i<=len-1;i++)
        {
            if(m[i]>=65){int e=m[i]-55;a[len-i]=e;}
            else b[i+1]=m[i]-48;
        }
        if(hw1(len))
        cout<<0<<endl;
        else sum(len);
    }

    好的附ac代码:

    #include<iostream>
    #include<cstdio>
    #include<string>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    char m[100001];
    bool hw1(int);
    int n,len;
    int a[10000001],b[10000001],c[10000001];
    int g=0;
    bool hw(int f)
    {
        int i=1,j=f;
        bool flag=1;
            while(i<=j)
            {
                if(c[i]!=c[j]){flag=0;break;}
                else{i++;j--;}
            }
            return flag;
    }
    int sum(int len)
    {
        int j=1;
        int x=0;
        while(len>=j)
        {
            c[j]=a[j]+b[j]+x;
            x=c[j]/n;
            c[j]%=n;
            j++;
        }
        c[j]=x;
        while(c[j]==0&&j>1)j--;
        for(int i=1;i<=j;i++)
        {
            a[i]=c[i];
            b[i]=c[j-i+1];
        }
        g++;
        if(g>=30)cout<<"Impossible"<<endl;
        else
        {
            if(hw(j))cout<<g<<endl;
            if(!hw(j))sum(j);
        }
    }
    int tp()
    {
        for(int i=0;i<=len-1;i++)
        {
            if(m[i]>=65){int e=m[i]-55;a[len-i]=e;}
        else a[len-i]=m[i]-48;
        }
        for(int i=0;i<=len-1;i++)
        {
            if(m[i]>=65){int e=m[i]-55;a[len-i]=e;}
            else b[i+1]=m[i]-48;
        }
        if(hw1(len))
        cout<<0<<endl;
        else sum(len);
    }
    int main()
    {
        cin>>n;
        scanf("%s",m);
        len=strlen(m);
        if(n==16)tp();
        else{
            for(int i=0;i<=len-1;i++)a[len-i]=m[i]-48;
            for(int i=0;i<=len-1;i++)b[i+1]=m[i]-48;
            if(hw1(len))
            cout<<0<<endl;
            else sum(len);
        }
        
        
    }
    bool hw1(int f)
    {
        int i=1,j=f;
        bool flag=1;
            while(i<=j)
            {
                if(a[i]!=a[j])
                {
                    flag=0;
                    break;
                }
                else{i++;j--;}
            }
            return flag;
    }

    码风清奇

    end-

  • 相关阅读:
    Win32基础知识2 Win32汇编语言003
    Win32基础知识4 Win32汇编语言005
    Win32基础知识4 Win32汇编语言005
    第一个程序 零基础入门学习Delphi01
    Mysql四种通信协议(linux下本地连接的都是socket 其他都是tcp)
    Rhino
    Common Gateway Interface Python CGI编程
    inaccessible
    mysqli_report
    算法功底网站性能瓶颈
  • 原文地址:https://www.cnblogs.com/zhuier-xquan/p/10466452.html
Copyright © 2020-2023  润新知