zoukankan      html  css  js  c++  java
  • 正整数的任意进制转换

    正整数的任意进制转换

    时间限制: 1 Sec  内存限制: 128 MB

    题目描述

    将 p 进制 n 转换为 q 进制。p 和 q 的取值范围为[2,36],其中,用到的数码按从小到大依次为:0,1,2,3,4,5,6,7,8,9,A,B,...,Z,不考虑小写字母。 

    输入

    一共1+m 行: 
    1行为 m,表示后面有 m 行(1 <= m <= 60). 
    其后的m行中,每行3个数: 进制p,p进制数n,以及进制 q。 
    三个数之间用逗号间隔。
    n 的长度不超过50位。

    输出

    转换后的 q 进制数。

    样例输入

    6
    18,2345678A123,18
    15,23456,18
    12,2345678,20
    16,12345678,23
    25,3456AB,21
    18,AB1234567,22

    样例输出

    2345678A123
    114E0
    22B7A4
    21A976L
    7C2136
    22JF0G367

     用普通的进制转换思维就可以了

    AC代码:

     1 #include <string>
     2 #include <cstdio>
     3 #include <cstring>
     4 #include <iostream>
     5 #include <algorithm>
     6 #define frn1(i,x,n) for (int i=x;i<=n;i++)
     7 #define fdn1(i,x,n) for (int i=x;i>=n;i--)
     8 #define frn0(i,x,n) for (int i=x;i<n;i++)
     9 #define frd0(i,x,n) for (int i=x;i>n;i--)
    10 using namespace std;
    11 int n,a[61],b[191],len;
    12 string s;
    13 void ex_change(int p,int q)
    14 {
    15     int tot=0,k=1;
    16     while (k<=len)
    17     {
    18         int stp=0;
    19         frn1(i,k,len)
    20         {
    21             int tmp=(stp*p+a[i]);
    22             a[i]=tmp/q;
    23             stp=tmp%q;
    24         }
    25         b[++tot]=stp;
    26         while(!a[k] && k<=len)
    27             k++;
    28     }
    29     frd0(i,tot,0)
    30     if (b[i]<10)
    31         printf("%d",b[i]);
    32     else
    33         printf("%c",char(b[i]+55));
    34     puts("");
    35 }
    36 int main()
    37 {
    38     scanf("%d",&n);
    39     while (n--)
    40     {
    41         cin>>s;
    42         int p=0,k,q=0;len=0;
    43         for (int i=0;s[i]!=',';k=++i)
    44         {
    45             p=p*10+s[i]-48;
    46             k=i;
    47         }
    48         for (int i=k+1;s[i]!=',';k=++i)
    49         if (s[i]>='0' && s[i]<='9')
    50             a[++len]=s[i]-48;
    51         else
    52             a[++len]=s[i]-55;
    53         frn0(i,k+1,s.size())
    54             q=q*10+s[i]-48;
    55         ex_change(p,q);
    56     }
    57     return 0;
    58 }
    进制
  • 相关阅读:
    鬼斧神工:求n维球的体积
    一个双曲函数的积分
    复杂的对数积分(八)
    一个有意思的对数积分的一般形式
    Logarithmic-Trigonometric积分系列(二)
    Logarithmic-Trigonometric积分系列(一)
    Some series and integrals involving the Riemann zeta function binomial coefficients and the harmonic numbers
    Euler Sums系列(六)
    Euler Sums系列(五)
    级数欣赏
  • 原文地址:https://www.cnblogs.com/LHR-HY/p/11064648.html
Copyright © 2011-2022 走看看