zoukankan      html  css  js  c++  java
  • 整数的进位制

    整数的进位制

     

    Problem Description

    给你一个10进制数,让你处理以下操作:
    1.T a。意义为:将当前的数转换成a进制数。
    2.A a。意义为:将当前的数加上十进制下的a。
    3.M a。意义为:将当前的数减去十进制下的a。
    4.C。意义为:将当前的数的最后一位去掉。如果当前的数为0,那么该操作可不处理。
    5.G a。意义为:将a连到当前的数的最后一位后面。保证在当前的进制下a这个一位数是存在的。(即,在10进制下保证0<=a<10,依此类推)
    6.O。意义为:输出当前的数(在当前的进位制下)。
    注意:进制数可能会大于10。如果出现了这种情况,那么从10开始依次用A,B,C,D,……代替。如果大写字母也不够了,那么再使用小写字母。保证英文字母是够用的。同时保证,在操作过程中当前的数不会超过1017,并且始终为正整数。
    即,数码的顺序为:
    0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz。

    Input

    第一行为操作的个数Q。
    第二行为初始的10进制数。
    下接Q行,每行一个操作。
    Q≤5×105。
    这题要用long long int.

    Output

    对于每个O操作,输出相应的回答。

    Sample Input

    17
    30
    T 5
    A 8
    M 6
    A 968
    O
    C
    C
    C
    T 7
    G 6
    T 16
    G B
    O
    T 10
    O
    M 99
    O

    Sample Output

    13000
    3EB
    1003
    904
    样例解释:
    T 5 num = 110(5)
    A 8 num = 123(5)
    M 6 num = 112(5)
    A 968 num = 13000(5)
    O output 13000
    C num = 1300(5)
    C num = 130(5)
    C num = 13(5)
    T 7 num = 11(7)
    G 6 num = 116(7)
    T 16 num = 3E(16)
    G B num = 3EB(16)
    O output 3EB
    T 10 num = 1003(10)
    O output 1003
    M 99 num = 904(10)
    O output 904

    解释:

    这个题,最多的就是设计到进制改变,设想一下从7进制到11进制的改变,那么以我的知识水平就是先把7进制变为10进制,然后再由10进制变为11进制。这样就会很浪费时间,所以我就只保存一个十进制的数,当需要输出的时候,我就安装相应的进制输出就好。那么对于其他的操作呢,需要安装当前的进制改变数的大小。其实很好做如果是

    T 操作,不用改变数的大小。

    A 操作,直接加上去就好了

    M操作,直接减就好

    C操作,先判断是不是0,减掉当前进制下的最后一位,实际上就是 除取整,例如当前数是  res ,  进制是 n ,那就是 res /= n

    G操作,也是好做的,因为是把数拼到当前进制下的数字后面,那就是 res *= n, res += a.   不同的是,需要把 a 这个字符转化为10进制下的数,就好了

    O操作,就是把一个十进制的数,按照n进制输出。

     1 #include<bits/stdc++.h>
     2 
     3 using namespace std;
     4 
     5 char ress[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
     6 
     7 long long int  gfun(long long int res, int bit) {
     8   char str[10];
     9   scanf("%s", str);
    10   res *= bit;
    11   if (str[0] >= '0' && str[0] <= '9') res += str[0] - '0';
    12   if (str[0] >= 'A' && str[0] <= 'Z') res += str[0] - 'A' + 10;
    13   if (str[0] >= 'a' && str[0] <= 'z') res += str[0] - 'z' + 36;
    14   return res;
    15 }
    16 
    17 void Out(long long int res, int bit) {
    18   char ans[1000];
    19   int t = 0;
    20   if (res == 0) ans[t++] = '0'; 
    21   while (res) {
    22     ans[t++] =  ress[res % bit];
    23     res /= bit;
    24   }
    25 
    26   for (int i = t-1; i >= 0; i--) {
    27     putchar(ans[i]);
    28   }
    29 
    30   putchar('
    ');
    31 }
    32 
    33 int main () {
    34   long long int res, num;
    35   int bit, n;
    36   char opt[10];
    37   while (~scanf("%d", &n)) {
    38     bit = 10;
    39     scanf("%lld", &res);
    40     while (n--) {
    41       scanf("%s", opt);
    42       switch (opt[0]) {
    43         case 'T': scanf("%d", &bit); break;
    44         case 'A': scanf("%lld", &num); res += num; break;
    45         case 'M': scanf("%lld", &num); res -= num; break;
    46         case 'C': if (res) res /= bit; break;
    47         case 'G': res = gfun(res, bit); break;
    48         case 'O': Out(res, bit); break;
    49       }
    50     //  printf("res = %lld
    ", res);
    51     }
    52   }
    53   return 0;
    54 }
    View Code
  • 相关阅读:
    sql server 辅助工具
    visual studio 辅助工具
    c# socket 判断端口是否被占用
    Socket 学习(三).1 tcp 通讯
    Socket 学习(三)
    c# 文件同步服务器,iis 集群 ,代码同步(二)
    免费3节精彩课程
    c# p2p 穿透(源码加密)
    互联网点对点通讯(P2P)
    文件同步服务器,iis 集群 ,代码同步(一)
  • 原文地址:https://www.cnblogs.com/gznb/p/11211321.html
Copyright © 2011-2022 走看看