到底应该怎样理解进制呢?首先得有“一个”的数量概念,然后就是这样的:
把用来表示数量的符号依次排列,例如: q w e r
然后定义最前面的符号为“零”,即“没有”,后面的符号表示的数量依次比前一个符号多“一个”
进制就这样产生了: 例如当我们数数,依次数到 q w e r ,再往后数一个,符号不够用了,那么就写成 wq
并且,我们把这种进制命名为“wq”进制。
感觉怪异吗? 那么请换成我们熟悉的所谓“10”进制看看:
我们的用于表示数量的符号依次是: 0 1 2 3 4 5 6 7 8 9 , 当数到9,再往后数“一个”时,就数到了 10
看这幅漫画(来源于网络),看看能不能理解“进制”的概念?
现在,给定表示数量的符号(这些符号就形成了某种进制),以及该种进制下的两个不超过100位的正整数,请计算两数之和。
输入格式:
第一行给定表示数量的符号,每个符号为一个字符、各不相同且中间没有空格,最多有30个符号且符号的可能范围是:数字0-9、大小写字母、!、@、#、$、%、^、&、*、(、)
接下来两行每行给出一个该进制下的不超过100位的正整数
输出格式:
在一行中输出该进制下的两数之和。
输入样例1:
0123456789 123 12
输出样例1:
135
输入样例2:
abcd bcd bc
输出样例2:
cab
1 #include <iostream>
2 #include <string>
3 #include <algorithm>
4 #include <map>
5 using namespace std;
6
7 int max_len(string s1, string s2) {
8 return s1.length() > s2.length() ? s1.length() : s2.length();
9 }
10 int main() {
11 string table, ls1, ls2;
12 char res[101]={};
13 map<char, int> mci;
14 map<int, char> mic;
15 cin >> table;
16 cin >> ls1;
17 cin >> ls2;
18 reverse(ls1.begin(), ls1.end());
19 reverse(ls2.begin(), ls2.end());
20 for (int i = 0; i < table.length(); i++) {
21 mci[table[i]] = i;
22 mic[i] = table[i];
23 }
24 int jinwei = 0,cnt=0;
25 for (int i = 0; i < max_len(ls1, ls2); i++) {
26 if (i < ls1.length() && i < ls2.length()) {
27 int sum = mci[ls1[i]] + mci[ls2[i]] + jinwei;
28 if (sum >= table.length()) {
29 res[i] = mic[sum - table.length()];
30 jinwei = 1;
31 cnt++;
32 }
33 else {
34 res[i] = mic[sum];
35 jinwei = 0;
36 cnt++;
37 }
38 }
39 else if (i < ls1.length() && i >= ls2.length()) {
40 int sum = mci[ls1[i]] + jinwei;
41 if (sum >= table.length()) {
42 res[i] = mic[sum - table.length()];
43 jinwei = 1;
44 cnt++;
45 }
46 else {
47 res[i] = mic[sum];
48 jinwei = 0;
49 cnt++;
50 }
51 }
52 else
53 {
54 int sum = mci[ls2[i]] + jinwei;
55 if (sum >= table.length()) {
56 res[i] = mic[sum - table.length()];
57 jinwei = 1;
58 cnt++;
59 }
60 else {
61 res[i] = mic[sum];
62 jinwei = 0;
63 cnt++;
64 }
65 }
66 }
67 if (jinwei != 0) {
68 res[++cnt] = mic[jinwei];
69 cnt++;
70 }
71
72 string s=" ";
73 for(int i=cnt;i>=0;i--)
74 if(res[i])
75 cout<<res[i];
76 return 0;
77 }
来源:https://www.cnblogs.com/luoyoooo/p/12215754.html