zoukankan      html  css  js  c++  java
  • POJ 1220 高精度进制转换

    题意:

    将一个k进制的高精度数字A转换成m进制数B(k,m<=62)

    分析:

    我本来想把数字先转换成10进制,然后再转换成m进制,觉得太麻烦,于是乎问WZC神犇怎样做简单

    他是这样做的:

    应用“除n取余法”,我们直接短除A,除数是m

    还是举例说明吧:7进制下的35,转换成2进制,就用3除以2,商是1,余数是1

    将1*7再加上第二位的5当成第二个数,继续重复以上步骤

    说白了了就和10进制的短除法一样,只不过我们在对于每一位短除的处理上采用的是7进制(处理十进制的时候不都是将余数*10加到下一位么~)

    这样,这个题目完美解决了~

    PS:代码里写了好多没有用的函数,忽略就好~

    友情提示:注意将0转换后是否有输出

    我在这里wa了好久。。。

    View Code
     1 #include <cstdio>
     2 #include <cstring>
     3 #include <cstdlib>
     4 #include <iostream>
     5 
     6 #define N 10000
     7 
     8 using namespace std;
     9 
    10 char cao[1000]={"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"};
    11 
    12 struct BIGN
    13 {
    14     int a[N];
    15 }ans;
    16 
    17 int n,p,mod[N],hash[N],m,tt;
    18 char s[10000];
    19 
    20 inline void prt(BIGN &a)
    21 {
    22     for(int i=a.a[0];i>=1;i--) printf("%d ",a.a[i]);
    23     puts("");
    24 }
    25 
    26 inline BIGN operator %(BIGN a,int md)
    27 {
    28     BIGN c;
    29     memset(c.a,0,sizeof c.a);
    30     c.a[0]=a.a[0];
    31     int ys=0;
    32     for(int i=a.a[0];i>=1;i--)
    33     {
    34         ys=a.a[i]+ys*n;
    35         c.a[i]=ys/md;
    36         ys%=md;
    37     }
    38     mod[++p]=ys;
    39     while(c.a[0]>1&&c.a[c.a[0]]==0) c.a[0]--;
    40     return c;
    41 }
    42 
    43 void prev()
    44 {
    45     for(int i=0;i<62;i++) hash[cao[i]]=i;
    46 }
    47 
    48 void change()
    49 {
    50     memset(ans.a,0,sizeof ans.a);
    51     ans.a[0]=strlen(s+1);
    52     for(int i=1;i<=ans.a[0];i++) ans.a[i]=hash[s[ans.a[0]-i+1]];
    53 }
    54 
    55 inline bool check(BIGN &c)
    56 {
    57     if(c.a[0]==1&&c.a[1]==0) return false;
    58     else return true;
    59 }
    60 
    61 void go()
    62 {
    63     scanf("%d%d%s",&n,&m,s+1);
    64     printf("%d %s\n%d ",n,s+1,m);
    65     change();
    66     p=0;
    67     while(check(ans)) ans=ans%m;
    68     if(p) while(p) printf("%c",cao[mod[p--]]);
    69     else printf("0");
    70     puts("");
    71     puts("");
    72 }
    73 
    74 int main()
    75 {
    76     prev();
    77     scanf("%d",&tt);
    78     while(tt--) go();
    79     system("pause");
    80     return 0;
    81 }
    没有人能阻止我前进的步伐,除了我自己!
  • 相关阅读:
    4.变量以及类型
    3.注释
    2.第一个python程序
    1.认识Python
    DB安装
    DB2<RedHed Linux> 创建数据库
    win 7设置主机域名
    FTP 错误1
    FTP 其他设置
    VM浏览器不能访问
  • 原文地址:https://www.cnblogs.com/proverbs/p/2720376.html
Copyright © 2011-2022 走看看