AcWing算法学习第三节---高精度问题.

news2025/4/7 23:04:33

系列文章目录

第一节快速排序
第二节二分法


在这里插入图片描述
学习路上的风景,我陪你一起去看,编程路上的算法,我陪你一起去学,朋友们你们好,我是夏目浅石,蟹蟹你点开文章和我一同进步,加油!遇见更好的自己。

文章目录

  • 系列文章目录
  • 前言
  • 一、高精度加法
  • 二、高精度减法
  • 三、高精度乘法
  • 四、高精度除法
  • 总结
    • 下期预告


前言

今天学了一些高精度问题的方法这里给大家分享一下,希望大家也可以学习并且掌握。


提示:以下是本篇文章正文内容,下面案例可供参考

一、高精度加法

知识点如下:
在这里插入图片描述
这是我在AcWing打卡界面总结的一些我自己的想法和思路,希望大家可以看完,接下来就是题目的讲解和代码;

1.输入的scanf还是效率很高的.并且有时候gets函数没办法使用,所以scanf,是一个挺好用的办法
2.char类型的输入方便输入更高位数,然后再减去‘0’的ASCII码值就能转换成想要的了。
3.核心的高精度算法–>就是每一个位数相加再加进位,然后再去莫10就是这个位数的答案了,再把进位除去10就是下一位的进位,依次类推就行…
4.输出的时候就是按照人类的习惯输出就好,就是倒着输出.

题目如下:
在这里插入图片描述

代码如下(示例):

#include<stdio.h>
#include<string.h>
int main()
{
    char arr1[100010],arr2[100010];
    scanf("%s",arr1);
    scanf("%s",arr2);
    int a[100010],b[100010],c[100010],len1=strlen(arr1),len2=strlen(arr2),i,j,k=0,t=0;
    for(i=len1-1,j=0;i>=0;i--) a[j++]=arr1[i]-'0';
    for(i=len2-1,j=0;i>=0;i--) b[j++]=arr2[i]-'0';
    for(i=0;i<len1||i<len2;i++)
    {
        if(i<len1) t=t+a[i];
        if(i<len2) t=t+b[i];
        c[k++]=t%10;
        t=t/10;
    }
    if(t) c[k++]=1;
    for(i=k-1;i>=0;i--) printf("%d",c[i]);
    return 0;
}

二、高精度减法

知识点如下:
在这里插入图片描述

之前看过许多博客关于这些高精度的,但是都是模棱两可,不是太理解,今天学了一下y总的高精度,大抵是懂了,这就来分享给大家让大家学习了。
总结:
1.我想就是拆分模块来写这一个算法,第一就是main函数,这里处理输入和调用函数的功能(作用),过多细节就看代码就行
2.讲解一下最先出现的cmp函数和后面出现的sub函数
@1.cmp函数就是比较这一串数字的长度以及大小这个功能,你先看俩字符串是否相同长度,不相同则长的一定大。
当长度相同时就需要比较两者的最高位是否相同(或者谁大谁小),依次类推直到找到不同则 return 1 or 0,这个函数尽量做到的是 c=a-b;a>=b。
@2.sub函数就是做减法对吧,根据cmp函数就是a-b这样,所以根据人的习惯啊,当3-5的时候人往往会变成-(5-3)这样去计算,所以就分成两种情况即:a开始就大于b,和a一开始小于b两种情况,所以一种需要先打印’-‘然后打印数字,另一种则不需要打印’-‘对吧?
3.高精度减法的核心算法:
两个数的低位相减然后看是否为负数,如果为负数则需要借10,则进位为1.
两个数的低位相减然后看是否为非负数,如果为非负数则不需要借10,且进位为0.
然后就是扫除前导零输出就可以了.

题目如下:
在这里插入图片描述

代码如下(示例):

#include<stdio.h>
#include<string.h>
//c=a-b;a>=b;
int cmp(char arr1[],char arr2[],int len1,int len2)
{
    if(len1!=len2)
    {
        if(len1>len2) return 1;
        else return 0;
    }

    for(int i=0;i<len1;i++)
    {
        if(arr1[i]!=arr2[i])
        {
            if(arr1[i]>arr2[i]) return 1;
            else return 0;
        }
    }
}
void sub(int a[],int b[],int len1,int len2)
{
    int c[100010],t=0;
    for(int i=0;i<len1;i++)
    {
        t=a[i]-t;
        if(i<len2)
        {
            t=t-b[i];
        }
        c[i]=(t+10)%10;
        if(t<0) t=1;
        else t=0;
    }
    while(c[len1-1]==0&&len1-1>0) len1--;
    for(int i=len1-1;i>=0;i--)
    {
        printf("%d",c[i]);
    }
}

int main()
{
    //输入 
    char arr1[100010],arr2[100010];
    int a[100010],b[100010];
    scanf("%s",arr1);
    scanf("%s",arr2);
    int len1=strlen(arr1),len2=strlen(arr2);

    for(int i=len1-1,j=0;i>=0;i--) a[j++]=arr1[i]-'0';
    for(int i=len2-1,j=0;i>=0;i--) b[j++]=arr2[i]-'0';

    if(cmp(arr1,arr2,len1,len2))
    {
        sub(a,b,len1,len2);
    }
    else
    {
        printf("-");
        sub(b,a,len2,len1);
    }
    return 0;
}

三、高精度乘法

知识点如下:
在这里插入图片描述

类似于加法,会加法这个乘法真的非常简单。
总结:
1.输入的处理;
2.拿b去和数组a的每一位去乘,然后就是莫10放到c数组里面,然后让进位/10就是下一个数的进位了

题目如下:
在这里插入图片描述

代码如下(示例):

#include<stdio.h>
#include<string.h>
const int N=100010;
void cheng(int a[],int b,int len)
{
    int c[N],i,t=0;
    for(i=0;i<len||t;i++)
    {
        if(i<len) 
        t=a[i]*b+t;
        c[i]=t%10;
        t/=10;
    }
    while(c[i]==0&&i>0) i--;
    for(int j=i;j>=0;j--) printf("%d",c[j]);
}
int main()
{
    char arr[N];
    scanf("%s",arr);
    int b,a[N],len=strlen(arr),i,j;
    scanf("%d",&b);
    for(i=strlen(arr)-1,j=0;i>=0;i--) a[j++]=arr[i]-'0';
    cheng(a,b,len);
    return 0;
}

该处使用的url网络请求的数据。


四、高精度除法

知识点如下:
在这里插入图片描述

高精度除法我感觉理解了这个过程其实这个题就不难,下main我来讲解一下吧hhh~
总结:
1.这里其实我想讲一讲最最重要的核心算法部分
这里其实就是理解t是除法做完商的余数,然后余数乘10+下一位数字就是新的被除数,依次类推,直到退出循环为止,下面只需要处理前导零,就可以输出啦!

题目如下:
在这里插入图片描述

代码如下(示例):

#include<stdio.h>
#include<string.h>
void chu(int a[],int b,int len)
{
	int c[100010],t=0;
	for(int i=len-1;i>=0;i--)
	{
		t=t*10+a[i];
		c[i]=t/b;
		t%=b;
	}
	while(c[len-1]==0&&len-1>0) len--;
	for(int i=len-1;i>=0;i--) printf("%d",c[i]);
	printf("\n"); printf("%d",t);
}
int main()
{
	char arr[100010];
	int b,a[100010],len;
	scanf("%s",arr);
	scanf("%d",&b);
	len=strlen(arr);
	for(int i=len-1,j=0;i>=0;i--) a[j++]=arr[i]-'0';
	chu(a,b,len);
	return 0;
}

总结

自己的感想:
这里为了大家方便大家复习我会给出我的acwing的地址想去看的话就去看看,当然也可以去acwng报名自己学然后再看我的博客这样会效果更好,不理解的咱们一起讨论学习,我觉得会很不错hhh~
知识点图片汇总
思维导图
在这里插入图片描述
记住这里面我是没有把核心算法家里面的,因为这只是一个宏观的导图,最重要的还是把我在acwing上的知识总结好好理解消化一下,这样才能获得收获hhh~咱们下一期见吧!

下期预告

前缀和与差分,欢迎来看哦hhh拜拜啦大家!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/48940.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2022Q3手机配件增长榜:手机壳、数据线等供求不断增加

本篇我们将继续来分析22年Q3季度中手机通讯行业的高增长概念。在手机通讯行业中&#xff0c;我们发现了3个高增长品类&#xff0c;分别是&#xff1a;手机耳机、手机壳、数据线。 一、手机配件类高增长概念——手机耳机 手机耳机可以分为不同种类&#xff0c;如&#xff1a;开放…

现代物流有哪些特点?

现代物流的特点有系统化、网络化、信息化、专用化和准时性和柔性化。 现代物流特点一&#xff1a;系统化 现代物流强调了物流体系是一个具有综合性和系统性的过程&#xff0c;以优化物流管理体系为目标&#xff0c;降低物流运营管理成本&#xff0c;实现企业效益提升&#xff0…

python笔记76-types.FunctionType 动态创建函数

前言 types.FunctionType 创建函数有2种方式&#xff1a; 从已有函数的基础上&#xff0c;创建一个新函数从一个compile 构建的函数对象上&#xff0c;创建一个新函数 FunctionType 使用 FunctionType 可以用于判断一个对象是不是函数 from types import FunctionType, Me…

中国互联网综合实力100强:猿辅导第39

11月2日&#xff0c;中国互联网企业综合实力指数发布会暨百家企业高峰论坛在厦门成功举办。发布会上&#xff0c;中国互联网协会正式发布了《中国互联网企业综合实力指数&#xff08;2022&#xff09;》以及2022年中国互联网综合实力前百家企业榜单。 北京猿力教育科技有限公司…

腾讯基础面

传送门1. 有了解过C吗&#xff1f;接受转语言吗&#xff1f;2. 有没有了解过一些框架的底层原理、底层优化、数据库的索引优化3. 了解过哪些Map&#xff0c;可以从底层简单说下嘛&#xff1f;4. 你项目中是如何去实现幂等性的&#xff1f;5. RPC的协议讲一讲&#xff0c;怎么处…

开源共建 | TIS整合数据同步工具ChunJun,携手完善开源生态

TIS整合ChunJun实操 B站视频&#xff1a; https://www.bilibili.com/video/BV1QM411z7w5/?spm_id_from333.999.0.0 一、ChunJun 概述 ChunJun是一款易用、稳定、高效的批流统一的数据集成框架&#xff0c;可基于实时计算引擎Flink实现多种异构数据源之间的数据同步与计算&…

MySQL日志管理、备份与恢复

文章目录一、mysql常用日志1、概述①、错误日志②、二进制日志③、中继日志④、慢查询日志⑤、通用查询日志&#xff0c;用来记录MySQL的所有连接和语句&#xff0c;默认是关闭的2、数据库中查询日志状态①、查看二进制日志开启状态②、查看慢查询日志功能是否开启③、查看慢查…

FPGA书籍

1、Xilinx FPGA 权威设计指南 本书系统地介绍了Xilinx新一代集成开发环境Vivado 2018的设计方法、设计流程和具体实现。 全书共11章&#xff0c;内容包括Xilinx新一代UltraScale结构、Vivado集成设计环境导论、Vivado工程模式基本设计实现、Vivado非工程模式基本设计实现、创建…

Java-1129

Java8 新特性 速度更快代码更少&#xff08;lambda、stream&#xff09;强大的Stream API便于并行最大化减少空指针异常Optional 速度更快&#xff1a;对底层数据结构哈希map的优化 解释说明hashmap基本原理 hashmap本质是一个长度16的数组元素的键值对以key&#xff1a;valu…

强化学习实战——Motion Imitation环境配置+所遇问题(win10)

GitHub代码 注意&#xff1a;本篇环境配置是基于上一篇强化学习实战——OpenAI Gym环境配置实战演示&#xff08;win10&#xff09;环境的延续&#xff01;&#xff01;&#xff01; 一、环境配置 1&#xff09;下载requirements.txt内安装包 问题1&#xff1a;pybullet不能…

天图资本通过香港上市聆讯:上半年利润下滑24%,王永华为董事长

11月29日&#xff0c;深圳市天图投资管理股份有限公司&#xff08;下称“天图投资”&#xff09;通过港交所聆讯并在港交所递交了聆讯后资料集&#xff08;即招股书&#xff09;。相较于此前招股书&#xff0c;天图资本补充了截至2022年6月30日的财务数据等信息。 招股书显示&a…

哪个牌子蓝牙耳机打电话清晰?通话最清晰的蓝牙耳机推荐

随着蓝牙耳机的普及&#xff0c;越来越多的数码产品如笔记本、平板等都要配有蓝牙耳机&#xff0c;因此&#xff0c;市场对于大电视、多用途、高性能的无线蓝牙耳机的需求不断扩张。蓝牙耳机再这几年不但才音质上采用了最新的技术&#xff0c;通话方面也有改进&#xff0c;下面…

测试开发之路,我在大厂做测试这四年的感悟

开篇 当开始写这篇文章时候&#xff0c;才感受到人生如白驹过隙&#xff0c;4 年时间飞逝&#xff0c;自己也从一个初入职场小白到能肩负项目核心事务的测试开发。在这里&#xff0c;总结 4 年来的心智成长之路&#xff0c;也是借机互相交流&#xff0c;并无对错之争&#xff…

Java web 项目Tamcat在IDEA控制台输出乱码

遇到乱码问题怎么解决呢&#xff1f; 出现乱码其实就是编码格式有问题&#xff0c;设置一下呗&#xff0c;我们先查看一下编码格式&#xff0c;在改一下 1.查看编码格式 首选进入Tamcat安装的根目录 进入conf目录 找到logging.prooperties文件并打开 查看编码格式 编码格式为…

单机服务器docker搭建mysql5.7主从同步

1.首先使用docker安装mysql5.7 docker pull mysql:5.7 2.创建主库&#xff08;从3306映射一个3308端口&#xff09; docker run -d -p 3308:3306 -v /home/mysql-master/conf:/etc/mysql/conf.d -v /home/mysql-master/data:/var/lib/mysql -v /home/mysql-master/log:/var/lo…

启程,2022亚马逊云科技re:Invent Peter带来主题演讲

北京时间11月29日&#xff0c;2022亚马逊云科技re:Invent全球大会开幕首日&#xff0c;亚马逊云科技高级副总裁Peter DeSantis带来最新创新产品隆重登场&#xff0c;其间不乏计算、网络、算法及Serverless等最新功能特性。 网络协议创新&#xff1a;新产品 新理念 基于亚马逊…

MCUXpresso IDE下高度灵活的FreeMarker链接文件模板机制

一、准备工作 首先需要准备好环境&#xff0c;包含必要的软件&#xff0c;痞子衡的环境如下&#xff1a; 集成开发环境&#xff1a; MCUXpresso IDE_11.6.0_8187&#xff0c;点此下载软件开发包&#xff1a; SDK_2.12.1_EVK-MIMXRT1170&#xff08;Toolchain需包含MCUXpresso I…

这么卷,现在测试工程师要求会写工具了?

Fintech概念正受到不少互联网金融公司的热捧&#xff0c;主要是指代那些可用于撕裂传统金融服务方式的高新技术。越来越多的企业开辟了新的部门去研究各种各样能让自己产品增值的科技类产品。 尤其是在很多互联网金融公司&#xff0c;业务分析师BA(Business Analyst)&#xff…

【Linux】-- 初识操作系统

目录 一、冯诺依曼体系结构 二、操作系统 1.概念 2.为什么要有操作系统 三.操作系统 1.硬件层 2.驱动层 3.操作系统层 4.用户层 &#xff08;1&#xff09;用户层 &#xff08;2&#xff09;系统调用接口 &#xff08;3&#xff09;用户操作接口 四、如何管理 1…

C. Zero-Sum Prefixes Codeforces Round #833 (Div. 2)(前缀和+贪心)

传送门 题意&#xff1a; 给你一个长度为n的数组&#xff0c;里面包含a1,a2,a3...an n个元素&#xff0c; 当的时候&#xff0c;你可以将变成任意数字&#xff0c; 问你经过任意次操作后对于&#xff0c;它的前i项和为0的个数是最大是多少&#xff1f; 思路&#xff1a; …