zoukankan      html  css  js  c++  java
  • poj1220------高精度进制转换模板

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    using namespace std;
    const int maxs = 1000;
    int oldBase,newBase;//原进制,新进制
    char origin[maxs];//原串
    int str[maxs],ans[maxs],goal[maxs];//被除数,除数,结果数组
    
    //将单个字符转变为数字
    int getNum(char ch)
    {
        if(ch>='0'&&ch<='9')//数字
            return ch-'0';
        if(ch>='A'&&ch<='Z') //大写字母
            return ch-'A'+10;
        return ch-'a'+36;//小写字母
    }
    //将数字转变为字符
    char getchar(int num)
    {
        if(num>=0&&num<=9)
            return num+'0';
        if(num>=10&&num<=35)
            return num-10+'A';
        return num-36+'a';
    }
    void trans()
    {
        memset(goal,0,sizeof(goal));//初始化结果数组
        //初始化,把输入的字符串转变为对应的数字
        int len = strlen(origin);
        str[0] = len; //str[0]存储字符串的长度
        for(int i=0;i<len;i++)
            str[i+1]=getNum(origin[i]);
        while(str[0]>=1)//被除数还没有为0,继续短除法
        {
            memset(ans,0,sizeof(ans));//ans[0]代表商的位数
            int y=0,i;//余数
            for(i=1;i<=str[0];i++)//手动模拟除法
            {
                y=y*oldBase+str[i];
                ans[++ans[0]]=y/newBase;
                y=y%newBase;
            }
            goal[++goal[0]]=y;//第一轮短除法结束,得到的余数
    
            //得到第二轮短除法的被除数,也就是上一轮的商,但是要去除前导0
            i=1;
            while(i<=ans[0]&&ans[i]==0)
                i++;
            memset(str,0,sizeof(str));
            for(;i<=ans[0];i++)
                str[++str[0]]=ans[i];
        }
        //输出结果
        for(int i=goal[0];i>=1;i--)
            printf("%c",getchar(goal[i]));
        printf("
    ");
    }
    int main()
    {
        freopen("in.txt","r",stdin);
        int T;
        cin>>T;
        while(T--)
        {
            scanf("%d%d",&oldBase,&newBase);
            scanf("%s",origin);
            printf("%d %s
    %d ",oldBase,origin,newBase);
            trans();
            printf("
    ");
        }
    
    }
    

      

  • 相关阅读:
    vue之过滤器的用法
    数组方法
    vue指令之 v-fo循环和 v-show 以及key值的用法
    清除浮动的几种方式
    cookie和session的区别
    layui添加新增弹出框
    layui如何实现图片上传功能
    css中设置背景图片平铺整个页面
    在vue中使用样式的方法
    windows最小最大化当前窗口和关闭当前窗口
  • 原文地址:https://www.cnblogs.com/wt20/p/5795321.html
Copyright © 2011-2022 走看看