poj1220

来源:互联网 发布:西西影音软件下载 编辑:程序博客网 时间:2024/05/20 14:22

Problem : NUMBER BASE CONVERSION

Description: 用0-9,A-Z,a-z这62个不同的数字和字母来表示不同进制的数,给出一个任意进制(62以内)的数,要求转换为指定进制的数。

Solution:刚开始看到这个我是想先把给出的数化成十进制,然后再由十进制转化为指定的进制,结果发现太麻烦了,我也觉得我实现不了。后来上百度才发现可以用除法解决。在这里为了方便,我举一个比较简单的例子。把十进制的12化成二进制表示,首先用1除以2,得到商是0,余数是1,然后用1乘以10(这里因为是十进制所以乘十)再加上2(12的个位数2),得到商为6,余数为0,这时候的余数存进另一个数组ans,因为这个余数就是我们要转化的二进制需要的那个余数。这时候06就存在了之前的那个存12的数组num里,我在这里有去掉前边多余的零;然后把6再去除以2,得到商为3,余数为0,把此时的余数存进ans数组;这时候num数组里是3,用3除以2,商为1,余数为1(余数1存进ans数组,商1存进num数组);最后用1除以2,商为0,余数为1;这时候num数组只有一个数而且为0,所以不用接着算了。这时候ans数组里为0011,倒序输出就得到了12的二进制了。

Code(C++):

#include <iostream>#include <string>#include <cstring>using namespace std;int num[1000];int ans[1000];int main(){    int N,length,r,t;    int m,n,i,j,pos,s;    string str;    cin>>N;    while(N--)    {        cin>>m>>n>>str;        length=str.size();        t=0,s=1;        for(i=0; i<length; i++)        {            if(str.at(i)>='0'&&str.at(i)<='9')                num[i]=str.at(i)-'0';            else if(str.at(i)>='A'&&str.at(i)<='Z')                num[i]=str.at(i)-'A'+10;            else if(str.at(i)>='a'&&str.at(i)<='z')                num[i]=str.at(i)-'a'+36;        }        memset(ans,0,sizeof(ans));        while(!(s==0))        {            r=0;            pos=0;            for(j=0; j<length; j++)            {                int temp=num[j];                num[pos++]=(r*m+temp)/n;                r=(r*m+temp)%n;            }            ans[t++]=r;            for(i=0;i<pos;i++)                if(num[i]!=0)                    break;            s=0;            for(;i<pos;i++)                num[s++]=num[i];            length=s;        }        cout<<m<<" "<<str<<endl;        cout<<n<<" ";        for(i=t-1; i>=0; i--)            {                if(ans[i]>=0&&ans[i]<=9)                    cout<<char(ans[i]+'0');                else if(ans[i]>=10&&ans[i]<=35)                    cout<<char(ans[i]+'A'-10);                else if(ans[i]>=36&&ans[i]<=61)                    cout<<char(ans[i]+'a'-36);            }        cout<<endl;        cout<<endl;    }    return 0;}
0 0
原创粉丝点击