首页 > 编程语言 >高精度算法-减法

高精度算法-减法

时间:2024-09-30 20:18:45浏览次数:3  
标签:高精度 int s2 s1 a3 a1 算法 减法 size

​

//高精度算法-减法
#include <iostream>
#include <string>
#include <vector>
#include<cmath>
using namespace std;
int main()
{
    string s1, s2;//减法.
    getline(cin, s1); getline(cin, s2);//减法的2个必要数字.
    int a1[200] = { 0 }; int a2[200] = { 0 }; int a3[200] = { 0 }; // 初始化数组 整型数组若未定义则初始化为随机数.
    char fhao = '+'; //定义一个符号位
    if (s1.size() < s2.size() || (s1.size() == s2.size() && s1 < s2)) {
        //第一个条件为 s1的长度 大于 s2的长度 可知一个必然结果 长度长的数字必然比长度短的数字大(数字>0)
        //第二个条件为 s1与s2的长度相等 所以需要判断 s1是否小于s2 这里牵扯到字典码
        //字典码的判断 如 "12"与"13"的判断 会先判断第一位 均为1 判断第二位 前者'2'在Ascii码中的为50 而'3'为51 所以 "13" > "12".
        swap(s1, s2); // 交换s1与s2 保证s1一定大于等于2
        fhao = '-'; //交换了 就意味着这次是小的数减大的数 所以到时候要输出一个负号来告诉使用者
    }
    for (int i = 0; i < s1.size(); i++) {
        a1[s1.size() - 1 - i] = s1[i] - '0'; //倒着放置 模拟竖式减法需要 
    }
    for (int i = 0; i < s2.size(); i++) { // 方法依旧
        a2[s2.size() - 1 - i] = s2[i] - '0';
    }
    for (int k = 0; k < s1.size(); k++) { //开始做减法题
        if (a1[k] < a2[k]) { // 比如某位 5被6减 所以要向更大的一位借个1过来 (这里是举例)
            a1[k] += 10;//借了 所以获得了10用在这一位置运算
            a1[k + 1] -= 1; // 前面一位的1被借走了 所以更新一下它的状态
        }
        a3[k] = a1[k] - a2[k]; //更新此刻a3的状态 为计算结束后的结果 下面举例:
        //首先 有一个12被5减,因为个位2不够5减的,即a1[k] < a2[k]
        //而后 12中的十位(1) 给各位2借了1位 转变过来就是10 而后十位1需要执行a1[k + 1] -= 1来更新
        //经过上述操作 十位1变成了0 但它借给了个位2一位 所以个位这个时候是12 这个时候12就可以满足被5减去了 结果是7
    }
    if (fhao == '-') { // 因为是小数被大数减 它是负号(上面的if语句定义了触发条件)
        cout << fhao; // 结果是负数 所以先输出一个 负数符号
    }
    int index = 0; // 定义一个下标 它是用来寻找 a3从哪一位开始输出合适的 因为我们是把数字翻转后再来模拟加减法的.
    for (int i = s1.size() - 1; i >= 0; i--) { // 从a3的末尾向前开始寻找
        if (a3[i] != 0) {  // 因为初始化a3的所有元素都是0 而第31行代码会一点点的把运算结果定义上去,但结果仍然可能会在存在0
            //因为我int a3[200] = { 0 };的元素后面可能还会存在0... 注意!我们是从末尾开始寻找哦
            //形象解释: a3=[1 0 3 2 0 0 0 0 ..... 0 0 0 0 0] 显然结果应该是3201 所以从末尾开始寻找第一个不是0的数字作为下标 方便后面输出
            index = i; // 下标为当前i值
            break; // 找到了就直接退出循环
        }
    }
    for (int i = index; i >= 0; i--) { // 开始打印咯 注意为什么倒着打印? 因为我们是模拟竖式减法运算
        //同时也是为什么要通过20 23两个for循环把数字翻转
        cout << a3[i]; // 从个位 十位 百位 开始输出结果...
    }
    return 0;
}

​

​

用来解决2222222222222222222222222222222222222222222222222222222222-22222222222222222222222222222222222222222222222222222这样的问题

标签:高精度,int,s2,s1,a3,a1,算法,减法,size
From: https://blog.csdn.net/icudhdhd/article/details/142662127

相关文章

  • 代码随想录算法训练营第六天|Day6哈希表基础
    242.有效的字母异位词题目链接/文章讲解/视频讲解:https://programmercarl.com/0242.%E6%9C%89%E6%95%88%E7%9A%84%E5%AD%97%E6%AF%8D%E5%BC%82%E4%BD%8D%E8%AF%8D.html思路1.暴力的解法,两层为循环,很明显时间复杂度是O(n^2)。boolisAnagram(char*s,char*t){if(......
  • 3. 算法笔记-对数器
    对数器是一个非常重要的自我验证技巧,其实现步骤如下:(1)方法A(2)方法B(3)随机样本产生器(4)用相同的样本验证方法A和方法B,比对结果是否一致。(5)若出现样本,使得结果不一致,查找原因,进行改进。(6)否则,方法验证成功。#include<vector>#include<cstdio>#incl......
  • 全同态加密算法概览
    我们前面有谈到《Paillier半同态加密算法》,半同态加密算法除了支持密文加法运算的Paillier算法,还有支持密文乘法计算的RSA算法,早期的PSI(隐私求交)和PIR(匿踪查询)都有使用基于RSA盲签名技术来实现。今天我们来谈谈能够有效支持任意函数密文计算的全同态加密算法(fully......
  • 谨防火灾!电瓶车检测AI算法助力城市/小区/园区多场景安全管理精细化、智能化
    随着人工智能技术的快速发展,AI智能分析网关V4在电瓶车检测领域的应用日益广泛。这一技术通过深度学习、计算机视觉等先进算法,实现了对电瓶车及其相关行为的智能识别和分析,为电瓶车的管理和应用提供了强大的技术支持。一、电瓶车检测算法的工作原理电瓶车检测AI算法主要基于计算......
  • Drain算法-笔记
    简介论文链接:https://jiemingzhu.github.io/pub/pjhe_icws2017.pdf算法原理图:有几点注意:根节点和叶节点实际是一套规则,并不包含日志数据真正的日志数据在叶节点之下的LogGroup第一层节点,基于假设:具有相同日志事件的日志消息可能具有相同的日志消息长度第二层节点,基于......
  • 高精度(1)——高精度减法
    题目描述给定两个正整数(不含前导0),计算它们的差,计算结果可能为负数。输入格式共两行,每行包含一个整数。输出格式共一行,包含所求的差。数据范围1≤整数长度≤100000输入样例3211输出样例21注释版代码#include<iostream>#include<vector>usingnamespacestd;//......
  • 排序算法之——归并排序,计数排序
    文章目录前言一、归并排序1.归并排序的思想2.归并排序时间复杂度及空间复杂度3.归并排序代码实现1)递归版本2)非递归版本二、计数排序1.计数排序的思想2.计数排序的时间复杂度及空间复杂度3.计数排序代码实现总结(排序算法稳定性)前言今天我们一起来了解归并排......
  • 代码随想录算法训练营第六天|理解hash表
    WhatisHashTable?引用自文章链接:https://programmercarl.com/哈希表理论基础.html#哈希表哈希表是根据关键码的值而直接进行访问的数据结构。直白来讲其实数组就是一张哈希表,哈希表中关键码就是数组的索引下标,然后通过下标直接访问数组中的元素。哈希函数通过hashCode把......
  • 计算机视觉算法
    计算机视觉算法详解及代码实现1.引言计算机视觉(ComputerVision,CV)是人工智能的重要分支,旨在让计算机具备从图像或视频中理解和提取有用信息的能力。随着深度学习技术的兴起,计算机视觉已经在诸多领域取得了突破性进展,如自动驾驶、医疗影像分析、安防监控等。本文将介绍计......
  • 轴承寿命预测 | 基于TCN时间卷积神经网络算法的轴承寿命预测附matlab完整代码
    轴承寿命预测|基于TCN时间卷积神经网络算法的轴承寿命预测附matlab完整代码数据划分:将数据集划分为训练集、验证集和测试集,通常采用时间序列数据的方式进行划分。构建TCN模型:设计TCN模型结构,包括卷积层、激活函数、池化层等。确保模型能够有效学习时间序列数据的特征。......