Luoyoooo

与其感慨路难行,不如马上出发

7-7 N进制高精度加法 (20分)

到底应该怎样理解进制呢?首先得有“一个”的数量概念,然后就是这样的:
把用来表示数量的符号依次排列,例如: 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 }
posted @ 2020-01-19 22:03  Luoyoooo  阅读(606)  评论(0编辑  收藏  举报