高精度加法,减法,乘法,除法(下)(C语言)

这篇具有很好参考价值的文章主要介绍了高精度加法,减法,乘法,除法(下)(C语言)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言
上一篇博客我们分享了高精度加法,减法,这一期我将为大家讲解高精度乘法和高精度除法。那让我们开始吧!
对加法和减法感兴趣的话就点我

高精度加法,减法,乘法,除法(下)(C语言),c语言学习,c语言,开发语言

1,乘法

让我们想想我们平时做数学时遇见乘法是怎么做的。以下图为例。
高精度加法,减法,乘法,除法(下)(C语言),c语言学习,c语言,开发语言
高精度乘法也是这样的一个思路,首先我们先把a和b的值储存进两个数组之中。然后将两个数组翻转之后,让a乘以b的每一位(从个位开始),然后错位相加。最后即可得到结果。
下面我用代码的方式来讲解:

#include <stdio.h>
#include<string.h>
void my_reverse(char* arr, int len)//翻转函数
{
    for (int i = 0; i < len - 1; i++, len--)
    {
        char temp = arr[i];
        arr[i] = arr[len - 1];
        arr[len - 1] = temp;
    }
}
void print_mul(int len1, int len2, char* arr1, char* arr2,int* mul)
{
    for (int i = 0; i < len2; i++)
    {
        for (int j = 0; j < len1; j++)//让arr1的每一位都乘以arr2的第i位
        {//高精度加法
            mul[i + j] += (arr1[j]-'0') * (arr2[i]-'0');//将结果存放在mul中
            mul[i + j + 1] += mul[i + j] / 10;
            mul[i + j] %= 10;
        }
    }
    while (mul[len1 + len2] == 0&&len1+len2 > 0)//去除前缀多余的0
        len1--;
    for (int i = len1 + len2; i >= 0; i--)//打印结果
        printf("%d", mul[i]);
}
int main()
{
    char arra[10100] = { 0 }, arrb[10100] = { 0 }; int arrmul[10010] = { 0 };//分别储存a,b的值和a*b的值
    scanf("%s %s", arra, arrb);
    int lena = strlen(arra);//计算a和b的长度
    int lenb = strlen(arrb);
    my_reverse(arra, lena);//将a和b进行翻转方便进行运算
    my_reverse(arrb, lenb);
    print_mul(lena, lenb, arra, arrb, arrmul);
    return 0;
}

我们学习之后可以去洛谷进行测试(洛谷 P1303 A*B Problem)

2,除法

除法在这里,点我点我!

3,尾声

这样我们的高精度算法就结束了,博主还将继续更新其他算法和编程学习的讲解。如果觉得感兴趣要记得关注下博主哦~。如果觉得本篇内容讲得不错的话请给博主一个赞和收藏吧。那么我们下期再见!文章来源地址https://www.toymoban.com/news/detail-756297.html

到了这里,关于高精度加法,减法,乘法,除法(下)(C语言)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 高精度减法

    要实现两个高精度数的减法,和高精度加法一样都是模拟竖式计算的过程,主要就是解决以下两个问题。 谁大谁小? 由于这两个数字都很大,但是不知道谁更大,所以要先判断哪个数更大,思路如下: 判断这两个数谁的位数更大,位数更大的自然更大。 如果位数不相同,从

    2024年02月08日
    浏览(55)
  • C++实现高精度减法

    一、问题描述:        高精度算法是处理大数字的数学计算方法。在一般的科学计算中,会经常算到小数点后几百位或者更多,当然也可能是几千亿几百亿的大数字。一般这类数字我们统称为高精度数,高精度算法是用计算机对于超大数据的一种模拟加,减,乘,除,乘方

    2024年02月14日
    浏览(47)
  • 高精度除法

    高精度除法和乘法讨论的一样,都是一个大整数和一个小整数之间的运算。 算法思路 根据小学除法一样,我们还是模拟这个过程。 注意这里遍历 (A) 数组的时候要按照我们读数字的顺序,也就是从数组尾部到头部遍历。 每一位的计算过程应该是,上一轮的余数 (r) 乘 (

    2024年02月08日
    浏览(91)
  • 高精度的乘除法

    793. 高精度乘法 给定两个非负整数(不含前导 0) A 和 B,请你计算 A×B 的值。 输入格式 共两行,第一行包含整数 A,第二行包含整数 B。 输出格式 共一行,包含 A×B 的值。 数据范围 1≤A的长度≤100000, 0≤B≤10000 输入样例: 输出样例: 代码: 794. 高精度除法 给定两个非负

    2023年04月20日
    浏览(72)
  • SQL 算术运算符:加法、减法、乘法、除法和取模的用法

    存储过程是一段预先编写好的 SQL 代码,可以保存在数据库中以供反复使用。它允许将一系列 SQL 语句组合成一个逻辑单元,并为其分配一个名称,以便在需要时调用执行。存储过程可以接受参数,使其更加灵活和通用。 创建存储过程的语法如下: 执行存储过程的语法如下:

    2024年02月05日
    浏览(58)
  • C++基础算法①——高精度加减法计算

    当我们利用计算机进行数值计算,有时候会遇到这样的问题: n!的精确结果是多少? 当n小于30的时候,我们当然可以通过电脑自带的计算器计算出来。但是当我们遇到 100! 的时候就没有办法直接计算出精确的结果。再比如,求两个20000位的数的和。 那怎么解决精度缺失的问

    2024年02月16日
    浏览(51)
  • 高精度除法【c++实现】超详细讲解

    高精度算法分为两种,高精除以低精和高精除以高精。不要看都是除法,就认为原理类似,其实是有很大差距的。让我们一起来学习吧! 有句话说在前面,如果除数等于0,就不要算了,不成立。( 如果你忘了这个知识,小学数学老师饶不了你 ) 高精度除低精度,原理是模

    2024年02月13日
    浏览(45)
  • 高精度加法

    高精度问题是指两个数字非常大,超过了 int ,甚至 long long 的范围,数字的位数甚至能达到 (10^5) ,那么如果要实现这样两个大数字的运算,需要解决以下两个问题: 如何存储? 这样的两个数字相加是不可能用普通类型来存储的,所以我们第一个要解决的问题就是如何存储

    2024年02月08日
    浏览(57)
  • 高精度加法(含代码)

    例如: 1111111111111+9, 列成 竖式 , 先算个位, 1 + 9 = 10 , 满 10 , 向十位进 1 。 接下来, 处理 进位 。 十位: 1+1=2 - 2 百位: 无进位, 直接照抄. 1 - 1 千位: 1 - 1 万位: ... ...: ... 最高位: 1 - 1 最终结果: 所以, 1111111111111+ 9 = 1111111111120 1111111111111+8888888888889, 这个算式变成了 高精度 + 高精度

    2024年02月06日
    浏览(45)
  • HJ57 高精度整数加法

    HJ57 高精度整数加法 1.逐位相加 按照传统加减法模式,从最后一位开始,逐位相加,逢十进一,传统方式从右往左相加,可以将数字翻转,变成从左往右按照数组遍历顺序相加,最后再将结果翻转。 时间复杂度:O(n+m) 2.利用大整形类型BigInteger实现

    2024年02月09日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包