整数的进位制

本文详细解析了一个涉及进制转换及多种数学操作的问题,包括加、减、连接等操作的具体实现方法。通过实例演示了如何高效处理这些操作并保持正确的数值表达。

整数的进位制

 

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('\n');
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\n", res);
51     }
52   }
53   return 0;
54 }
View Code

 

转载于:https://www.cnblogs.com/gznb/p/11211321.html

dnSpy是目前业界广泛使用的一款.NET程序的反编译工具,支持32位和64位系统环境。它允许用户查看和编辑.NET汇编和反编译代码,以及调试.NET程序。该工具通常用于程序开发者在维护和调试过程中分析程序代码,尤其在源代码丢失或者无法获取的情况下,dnSpy能提供很大的帮助。 V6.1.8版本的dnSpy是在此系列软件更新迭代中的一个具体版本号,代表着该软件所具备的功能与性能已经达到了一个相对稳定的水平,对于处理.NET程序具有较高的可用性和稳定性。两个版本,即32位的dnSpy-net-win32和64位的dnSpy-net-win64,确保了不同操作系统架构的用户都能使用dnSpy进行软件分析。 32位的系统架构相较于64位,由于其地址空间的限制,只能支持最多4GB的内存空间使用,这在处理大型项目时可能会出现不足。而64位的系统能够支持更大的内存空间,使得在处理大型项目时更为方便。随着计算机硬件的发展,64位系统已经成为了主流,因此64位的dnSpy也更加受开发者欢迎。 压缩包文件名“dnSpy-net-win64.7z”和“dnSpy-net-win32.7z”中的“.7z”表示该压缩包采用了7-Zip压缩格式,它是一种开源的文件压缩软件,以其高压缩比著称。在实际使用dnSpy时,用户需要下载对应架构的压缩包进行解压安装,以确保软件能够正确运行在用户的操作系统上。 dnSpy工具V6.1.8版本的发布,对于.NET程序员而言,无论是32位系统还是64位系统用户,都是一个提升工作效率的好工具。用户可以根据自己计算机的操作系统架构,选择合适的版本进行下载使用。而对于希望进行深度分析.NET程序的开发者来说,这个工具更是不可或缺的利器。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值