zoukankan      html  css  js  c++  java
  • 1074. 宇宙无敌加法器(20)

    原题: https://www.patest.cn/contests/pat-b-practise/1074

    思路: 就是人工模拟加法的问题, 正常进制都是10, 现在就是进制从字符串中
    读取. 但有些情况要坐下特殊处理, 比如输入的两个数可能位数不一样, 这对
    我们后续计算造成不小的麻烦, 我的做法是强制补前导0, 使输入完全一致.
    另外需要注意两个3位数相加可能得到4位数, 所以结果字符串要开大一些. 题目
    中给的数字范围都没什么暖用, 比如题目中说了输入的两个数是正的, 但结果测试
    仍然会检查输出为0的情况, 试问两个正数相加怎么能得0呢, 但是我们实现的算法
    不管有没有0, 都能正常工作.

    题目中有个数字是有用的, 那就是数字的位数为20位, 这就要求在后续打印数字的
    时候不能采用sscanf进行字符串转数字. 只能采用传统的方法使用getchar一步
    打印

    测试点3和测试点4测试的是数非常大的情况, 比如20位
    测试点5测试的是输出0的情况

    实现:

    #include <stdio.h>
    #include <string.h>
    #define LEN 30
    
    int main (void) {
        char table[LEN];
        int len;
        char num1[LEN];
        char num2[LEN];
        char res[LEN];
        char tmp1[LEN];
        char tmp2[LEN];
        int i;
        int j;
    
        table[0] = '0';
        scanf("%s", table + 1);
        scanf("%s", tmp1);
        scanf("%s", tmp2);
        len = strlen(table);
        for (i = 0; i < len; i++) {
            num1[i] = '0';
            num2[i] = '0';
            res[i] = '0';
        }
        i = len - 1;
        for (j = strlen(tmp1) - 1; j >= 0; j--) num1[i--] = tmp1[j];
        num1[len] = ''; // 这个不能少
        i = len - 1;
        for (j = strlen(tmp2) - 1; j >= 0; j--) num2[i--] = tmp2[j];
        num2[len] = '';
    
        int now;
        int carry = 0; // 进位
        int sys;       // 进制
        for (i = len - 1; i >= 0; i--) {
            if (table[i] == '0') {
                sys = 10;
            } else {
                sys = table[i] - '0';
            }
            now = (num1[i] - '0') + (num2[i] - '0') + carry;
            if (now < sys) {
                res[i] = now + '0';
                carry = 0;
            } else {
                carry = 1;
                res[i] = now - sys + '0';
            }
        }
        res[len] = ''; // 这行也可以不需要
    
        for (i = 0; i < len; i++) {
            if (res[i] != '0') break;
        }
        if (i == len) {
            printf("0");
        } else {
            for (; i < len; i++) {
                printf("%c", res[i]);
            }
        }
    
        return 0;
    }
    
    
  • 相关阅读:
    700. Search in a Binary Search Tree
    100. Same Tree
    543. Diameter of Binary Tree
    257. Binary Tree Paths
    572. Subtree of Another Tree
    226. Invert Binary Tree
    104. Maximum Depth of Binary Tree
    1、解决sublime打开文档,出现中文乱码问题
    移植seetafaceengine-master、opencv到ARM板
    ubuntu16.04-交叉编译-SeetaFaceEngine-master
  • 原文地址:https://www.cnblogs.com/asheng2016/p/7898392.html
Copyright © 2011-2022 走看看