码迷,mamicode.com
首页 > 其他好文 > 详细

poj1220:高精度进制转换模板题

时间:2014-09-23 21:22:25      阅读:131      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   io   os   ar   for   div   sp   

今天撸3708  一直奇怪的re 就先放下了,写这个题的过程中学习了一个高精度进制转换,用这个模板写了1220

记录一下:

#include <iostream>
#include <stdio.h>
#include<string.h>
#include<algorithm>
#include<string>
#include<ctype.h>
using namespace std;
#define MAXN 10000
char s[10000];
int start[10000];
int res[10000];
int ans[10000];
int getnum(char c)
{
    if(c>=a)
        return c-a+36;
    if(c>=A)
        return c-A+10;
    return c-0;
}
char getchar(int n)
{
    if(n>=36)
        return a+n-36;
    if(n>=10)
        return A+n-10;
    return 0+n;
}
void trans(char* str,int base0,int base1)
{
    memset(res,0,sizeof(res));
    int y,i,j;
    start[0]=strlen(str);
    for(i=1;i<=start[0];i++)
    {
        start[i]=getnum(str[i-1]);
    }
    while(start[0]>=1)
    {
        y=0; //余数
        ans[0]=start[0];
        for(i=1;i<=start[0];i++)
        {
            y=y*base0+start[i];
            ans[i]=y/base1;
            y%=base1;
        }
        res[++res[0]]=y;  //这一轮的余数
        i=1;
        while(i<=ans[0]&&ans[i]==0)
            i++;
        memset(start,0,sizeof(start));
        for(j=i;j<=ans[0];j++)
            start[++start[0]]=ans[j];
        memset(ans,0,sizeof(ans));
    }
    return;
}
void output()
{
    for(int i=res[0];i;i--)
        printf("%c",getchar(res[i]));
    printf("\n");
}
int main()
{
    #ifndef ONLINE_JUDGE
        freopen("shu.txt","r",stdin);
    #endif
    int t;
    scanf("%d",&t);
    while(t--)
    {
        int x,y;
        scanf("%d%d%s",&x,&y,s);
        trans(s,x,y);
        printf("%d %s\n",x,s);
        printf("%d ",y);
        output();
        printf("\n");
    }


    return 0;
}

 

poj1220:高精度进制转换模板题

标签:style   blog   color   io   os   ar   for   div   sp   

原文地址:http://www.cnblogs.com/oneshot/p/3989150.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!