wikioi 1045 回文数

来源:互联网 发布:java写数据到txt 编辑:程序博客网 时间:2024/05/02 01:53

http://wikioi.com/problem/1045/

其实就是道模拟题,按题意来就行了,想想哪些地方可以优化

#include<cstdio>#include<cstring>#include<algorithm>#include<iostream>using namespace std;char a[1000];int s1[1000];int s2[1000];int s[1000];int m;int step=0;int l;void fz(){     for(int i=1;i<=l;i++)     {            s2[l-i+1]=s1[i];     }//倒着储存}void work(){     step++;     for(int i=1;i<=l;i++)     {             s[i]=s1[i]+s2[i];     }     for(int i=1;i<=l;i++)//类似高精     {             if(s[i]>=m)//注意精度             {             int w=s[i]/m;             s[i+1]+=w;             s[i]=s[i]%m;             }     }     while(s[l+1]>0)     {                    if(s[l+1]>=m)             {             int w=s[l+1]/m;             s[l+2]+=w;             s[l+1]=s[l+1]%m;             }             l++;     }     for(int i=1;i<=l;i++)     {             s1[l-i+1]=s[i];     }}bool check()//判断是否为回文数{     if(step>30)     {         printf("Impossible!\n");         return true;     }     for(int i=1;i<=l;i++)     {             if(s1[i]!=s1[l-i+1])return false;     }          printf("STEP=%d\n",step);     return true;}int main(){    scanf("%d",&m);    scanf("%s",a);    l=strlen(a);    for(int i=0;i<l;i++)    {            if(a[i]-'0'>10)s1[i+1]=a[i]-'A'+10;            else s1[i+1]=a[i]-'0';    }    while(!check())    {    fz();    work();    }}


原创粉丝点击