zoukankan      html  css  js  c++  java
  • 九度OJ 1340:小A的计算器 (进制转换)

    时间限制:1 秒

    内存限制:32 兆

    特殊判题:

    提交:735

    解决:202

    题目描述:

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


    思路:

    数字需用字符串表示,要有翻译函数(从字符翻译成数字的,以及反过来的)。

    再就是注意结果为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;
    }
    /**************************************************************
        Problem: 1340
        User: liangrx06
        Language: C
        Result: Accepted
        Time:0 ms
        Memory:912 kb
    ****************************************************************/



  • 相关阅读:
    Notes about "Exploring Expect"
    Reuse Sonar Checkstyle Violation Report for Custom Data Analysis
    Eclipse带参数调试的方法
    MIT Scheme Development on Ubuntu
    Manage Historical Snapshots in Sonarqube
    U盘自动弹出脚本
    hg的常用配置
    Java程序员的推荐阅读书籍
    使用shared memory 计算矩阵乘法 (其实并没有加速多少)
    CUDA 笔记
  • 原文地址:https://www.cnblogs.com/liangrx06/p/5083793.html
Copyright © 2011-2022 走看看