zoukankan      html  css  js  c++  java
  • ACM题目————小A的计算器

    Description

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

    Input

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

    Output

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

    Sample Input

    4
    ba cd
    c b
    b c
    ba c

    Sample Output

    dd
    d
    d
    bc

    Hint

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

    用的蠢方法解决,用的方法和大数的加减法差不多。

    #include <stdio.h>  
    #include <string.h>  
       
    #define N 100  
    #define M 10  
       
    int main(void)  
    {  
        int n, i, j;  
        char a[M+1], b[M+1];  
        int lena, lenb;  
       
        while (scanf("%d", &n) != EOF)  
        {  
            for(j=0; j<n; j++)  
            {  
                scanf("%s%s", a, b);  
       
                lena = strlen(a);  
                for (i=M-1; i>=M-lena; i--)  
                    a[i] = a[i-M+lena];  
                for (i=0; i<M-lena; i++)  
                    a[i] = 'a';  
                a[M] = '';  
       
                lenb = strlen(b);  
                for (i=M-1; i>=M-lenb; i--)  
                    b[i] = b[i-M+lenb];  
                for (i=0; i<M-lenb; i++)  
                    b[i] = 'a';  
                b[M] = '';  
       
                for (i=M-1; i>=0; i--)  
                {  
                    int tmp = a[i] + b[i]-'a';  
                    if (tmp > 'z')  
                    {  
                        a[i-1] += 1;  
                        a[i] = (char)(tmp - 26);  
                    }  
                    else  
                        a[i] = tmp;  
                }  
       
                for (i=0; i<M; i++)  
                {  
                    if (a[i] != 'a')  
                        break;  
                }  
                if (i == M)  
                    printf("a
    ");  
                else  
                    printf("%s
    ", a+i);  
            }  
       
            break;  
        }  
       
        return 0;  
    } 
    低调做人,高调做事。
  • 相关阅读:
    二次识别
    IPC
    HW
    数据库异常:SQL Error: 0, SQLState: S0022
    mysql 分页查询
    [Err] 1248
    名句摘抄
    理智向左 疯狂向右
    kindle怎么导入电子书
    设置 myeclipse 编码格式
  • 原文地址:https://www.cnblogs.com/Asimple/p/5662883.html
Copyright © 2011-2022 走看看