九度oj 题目1340:小A的计算器

题目描述:

 以往的操作系统内部的数据表示都是二进制方式,小A新写了一个操作系统,系统内部的数据表示为26进制,其中0-25分别由a-z表示。
 现在小A要在这个操作系统上实现一个计算器,这个计算器要能实现26进制数的加法运算。你能帮小A实现这个计算器吗?

输入:

 输入的第一行包括一个整数N(1<=N<=100)。
 接下来的N行每行包括两个26进制数x和y,它们之间用空格隔开,每个数的位数最多为10位,我们可以保证相加的结果的位数最多也是10位。每个数会用小A所设计的操作系统中的表示方法来表示,如:bsadfasdf。即每个数的各个位均由26个小写字母a-z中的一个来表示。

输出:

 输出x和y相加后的结果,结果也要用题目中描述的26进制数来表示。

样例输入:
4
ba cd
c b
b c
ba c
样例输出:
dd
d
d
bc
提示:

 1.注意,26进制数的表示方式和10进制数一样,最右边是最低位。
 2.输入的两个数有可能有前缀0,即a,请在程序中进行处理。
 3.结果中如果出现前缀0,请自动滤除,除非结果就是0。如:结果为ab时,要输出b,因为a表示0。

 1 #include <cstdio>
 2 #include <cstdlib>
 3 #include <cstring>
 4 #include <algorithm>
 5 
 6 char ta[12], tb[12], tc[15];
 7 int na[15],nb[15],nc[15];
 8 
 9 int main(int argc, char const *argv[])
10 {
11     int n;
12     //freopen("input.txt","r",stdin);
13     while(scanf("%d",&n) != EOF) {
14         while(n--) {
15             scanf("%s %s",ta,tb);
16             int lena = strlen(ta);
17             int lenb = strlen(tb);
18             memset(na,0,sizeof(na));
19             memset(nb,0,sizeof(nb));
20             memset(nc,0,sizeof(nc));
21 
22             for(int i = lena - 1, j = 0; i >= 0; i--, j++) {
23                 na[j] = ta[i] - 'a';
24             }
25             for(int i = lenb - 1, j = 0; i >= 0; i--, j++) {
26                 nb[j] = tb[i] - 'a';
27             }
28             int ci = 0;
29             for(int i = 0; i < 15; i++) {
30                 int ben = na[i] + nb[i] + ci;
31                 nc[i] = ben % 26;
32                 ci = ben/26;
33             }
34             int j = 0;
35             int isBegin = false;
36             for(int i = 14; i >= 0; i--) {
37                 if(!isBegin && nc[i] == 0) {
38                     continue;
39                 }
40                 else if(!isBegin && nc[i] != 0) {
41                     isBegin = true;
42                     tc[j++] = nc[i] + 'a';
43                 }
44                 else if(isBegin) {
45                     tc[j++] = nc[i] + 'a';
46                 }
47             }
48             if(j == 0) {
49                 tc[j++] = 'a';
50             }
51             tc[j] = '\0';
52             puts(tc);
53         }
54     }
55     return 0;
56 }

 注意提示3

posted @ 2016-08-16 11:18  Jason杰  阅读(454)  评论(0编辑  收藏  举报