zoukankan      html  css  js  c++  java
  • POJ_1220_Nmber Sequence

    上网查了一下进制转换的算法,发现一个性能比较好的:m进制转换成n进制,先用例如62进制ABC转换成10进制,就是用余位c(第一个数余位数值为0)乘以原基数from,加上A表示的数值,然后得到一个数,对to(要转换的进制)取商替换字符A,注意要用相应字符替换相应位这里是s[0],然后取模作为计算下位时的余位,当计算到最后一位时把余位存起来,因为这就是要准换成的数字的第一位,最后逆序输出就行。最终直到s字符串所有位都是0,反复操作过程中可以改变遍历的下限也就是从第一个不为0的地方开始乘基数取模。

    代码:

     1 #include<stdio.h>
     2 #include<string.h>
     3 #define N 10010
     4 
     5 char s[N],back[N];
     6 
     7  int to_10(char ch)
     8 {
     9     if(ch<='9')
    10         return ch-'0';
    11     if(ch<='Z')
    12         return ch-'A'+10;
    13     return ch-'a'+36;
    14 }
    15 
    16 char toch[]="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
    17 int ans[N];
    18 
    19 int main(void)
    20 {
    21     int tcase,from,to;
    22     scanf("%d",&tcase);
    23     while(tcase--)
    24     {
    25     scanf("%d%d%s",&from,&to,s);
    26     strcpy(back,s);
    27     int i,c=0,t,count=0,low=0,tag=0;
    28     int len=strlen(s);
    29     while(1)
    30     {
    31         if(low==len)//
    32             break;
    33         c=tag=0;
    34         for(i=low; i<len; i++)
    35         {
    36             t=c*from+to_10(s[i]);
    37             s[i]=toch[t/to];
    38             if(t/to)
    39                 tag=1;
    40             if(!tag&&t/to==0)
    41                 low=i+1;
    42             c=t%to;
    43             if(i==len-1)
    44                 ans[count++]=c;
    45         }
    46     }
    47     printf("%d %s
    ",from,back);
    48     printf("%d ",to);
    49     while(count--)
    50         putchar(toch[ans[count]]);
    51     puts("
    ");
    52     }
    53     return 0;
    54 }
  • 相关阅读:
    大数据概述
    c语言文法
    实验一 词法分析程序实验
    语法分析程序
    第一篇博客~关于编译原理的理解
    《DenseNet Models for Tiny ImageNet Classification》课程设计论文
    物体检测的尺度效应实验
    16路PWM输出的pca9685模块
    Rocketlab公司火箭Electron介绍
    网址图书收藏
  • 原文地址:https://www.cnblogs.com/rootial/p/3218836.html
Copyright © 2011-2022 走看看