首页 > ACM题库 > 九度OJ > 九度-1340-小A的计算器[进制转换]
2014
02-03

九度-1340-小A的计算器[进制转换]

题目来自王道论坛计算机考研数据结构算法实战测试(2)

题目描述:
 以往的操作系统内部的数据表示都是二进制方式,小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。 

简单的进制问题,模拟即可。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

int main(void){

    int N;
    char a[16],b[16];
    int sum[16];
    int la,lb;
    int i,j,k;
    while(scanf("%d",&N) != EOF){
          while(N--){

                     memset(sum,0,16 * sizeof(int));
                     scanf("%s%s",a,b);
                     la = strlen(a);
                     lb = strlen(b);
                     for(i=la-1,j=lb-1,k=0;i>=0 && j >= 0;--i,--j){
                                            sum[k++] = a[i]-'a' + b[j] - 'a';

                     }
                     if(i<0 && j>=0){
                            for(;j>=0;j--)
                            sum[k++] = b[j] - 'a';
                    }
                    if(i>=0 && j<0){
                            for(;i>=0;i--)
                            sum[k++] = a[i] - 'a';
                    }
                    for(i=0;i<k;i++){
                                sum[i+1] = sum[i+1] + sum[i] / 26; 
                                sum[i] = sum[i] % 26;
                    }
                    for(i=k+1;i>=0;i--){
                                    if(sum[i] != 0)
                                              break;
                    }
                    if(i== -1)
                           printf("a"); 
                    for(;i>=0;i--)
                    printf("%c",'a'+ sum[i]);

                    printf("\n");
        }   
    }
    return 0;
}

 


  1. I like your publish. It is great to see you verbalize from the coronary heart and clarity on this essential subject matter can be easily noticed.