zoukankan      html  css  js  c++  java
  • 2020/3/7 A-B

    题目(高精度 高精度 高精度...)

    已知两个数A和B,求A-B的运算结果。

    学习心得

    (来自老师的熏陶)

    主要思路:

    我们要从低位开始减。

    步骤:

    首先比较减数和被减数的大小。当减数和被减数位数不同时可以直接判断两数大小;如果两数位数相同时,则比较字符串的大小。(strcmp实现)
    然后处理每一位相减,要考虑前一位相减是否有借位,有借位则需要减去借位,无则不减。
    再去判断是否够减,如果不够减,就要借位后再去减,同时置借位为1,否则置借位为0。

    代码

    #include <bits/stdc++.h>
    using namespace std;
    #define MAXN 20000
    char s1[MAXN], s2[MAXN], tmp[MAXN];
    int a[MAXN], b[MAXN], c[MAXN];
    int main() {
        scanf("%s %s", s1, s2);
        int lena = strlen(s1);
        int lenb = strlen(s2);
        if ((lena<lenb) || (lena==lenb && strcmp(s1,s2)<0)) {
            printf("-");
            strcpy(tmp, s1);
            strcpy(s1, s2);
            strcpy(s2, tmp);
            lena = strlen(s1);
            lenb = strlen(s2);
        }
        for (int i=0; i<lena; i++) {
            a[i] = s1[lena-i-1] - '0';
        }
        for (int i=0; i<lenb; i++) {
            b[i] = s2[lenb-i-1] - '0';
        }
        for (int i=0; i<lena; i++) {
            if (a[i]<b[i]) {
                a[i+1]--;
                a[i] += 10;
            }
            c[i] = a[i] - b[i];
        }
        for (int i=lena-1; i>=0; i--) {
            if (c[i]==0 && lena>1) {
                lena--;
            } else {
                break;
            }
        }
        for (int i=lena-1; i>=0; i--) {
            printf("%d", c[i]);
        }
        printf("
    ");
        return 0;
    }
    
  • 相关阅读:
    【转】java正则表达式
    NDK学习笔记-使用现有so动态库
    NDK学习笔记-增量更新
    NDK学习笔记-增量更新
    NDK学习笔记-文件的拆分与合并
    NDK学习笔记-文件的拆分与合并
    NDK学习笔记-NDK开发流程
    NDK学习笔记-NDK开发流程
    NDK学习笔记-JNI的引用
    NDK学习笔记-JNI的引用
  • 原文地址:https://www.cnblogs.com/CNLLB/p/12438671.html
Copyright © 2011-2022 走看看