十六进制序列

来源:互联网 发布:下载地毯设计软件 编辑:程序博客网 时间:2024/05/21 21:01

http://www.acmicpc.sdnu.edu.cn/problem/show/1161
每一个字串比前面的字串多一个数注意是一个数,而不是一个字符,多出几个字符需要特殊判断和处理,代码读起来还是比较简单的,但是不小心做起来就全是坑,不算思考的时间,调试代码就花了1个半小时。
代码还有很多待优化的地方,比如输入输出的scanf printf 。代码中加了不少调试的代码,读者可以删了,增加可读性。

#include<iostream>#include<stdio.h>#include<cmath>#include<string.h>#include<map>#include<queue>#include<algorithm>using namespace std;void chuli(int i){    if (i<10)    {        cout<<i;    }else if (i==10)    {        /* code */        cout<<"A";    }else if (i==11)    {        /* code */        cout<<"B";    }else if (i==12)    {        /* code */        cout<<"C";    }else if (i==13)    {        /* code */        cout<<"D";    }else if (i==14)    {        /* code */        cout<<"E";    }else if (i==15)    {        /* code */        cout<<"F";    }}int a[45000]={0};int b[45000]={0};int main(){    a[1]=1;    int temp=1;    b[1]=1;    for (int i = 2; i < 45000; ++i)    {        /* code */        if (i<=15)        {            /* code */            temp+=1;            a[i]=a[i-1]+temp;        }else if (i<=(16*16-1))        {            /* code */            temp+=2;            a[i]=a[i-1]+temp;        }else if (i<=(16*16*16-1))        {            /* code */            temp+=3;            a[i]=a[i-1]+temp;        }else if (i<=(16*16*16*16-1))        {            /* code */            temp+=4;            a[i]=a[i-1]+temp;        }else if (i<=(16*16*16*16*16-1))        {            /* code */            temp+=5;            a[i]=a[i-1]+temp;        }else if (i<=(16*16*16*16*16*16-1))        {            /* code */            temp+=6;            a[i]=a[i-1]+temp;        }else if (i<=(16*16*16*16*16*16*16-1))        {            /* code */            temp+=7;            a[i]=a[i-1]+temp;        }else        {            /* code */            temp+=8;            a[i]=a[i-1]+temp;        }        b[i]=temp;    }    // cout<<a[256]<<endl;    // cout<<b[255]<<endl;    // cout<<b[256]<<endl;    while(cin>>temp)    {        for (int i = 0; i < 45000; ++i)        {            /* code */            if (temp<=a[i])            {                /* code */                temp-=a[i-1];                break;            }        }        // if (temp==0)        // {        //  temp=1;        // }//      cout<<"1--"<<temp<<endl;        int weizhi=0;        for (int i = 0; i < 45000; ++i)        {            /* code */            if (b[i]==temp)            {                /* code *///          cout<<"2--"<<b[i]<<"--"<<i<<endl;                temp=i;                break;            }else if (b[i]>temp)            {                /* code *///          cout<<"2--"<<b[i]<<"--"<<i;                weizhi=b[i]-temp;//              cout<<"--"<<weizhi<<endl;                temp=i;                break;            }        }//      cout<<"4--";        for (int i = 0; i < weizhi; ++i)        {            /* code *///          cout<<temp%16<<"  ";            temp=temp/16;        }//      cout<<endl;//      cout<<"3--"<<temp<<endl;        chuli(temp%16);        cout<<endl;    }    return 0;}
0 0
原创粉丝点击