《编程思维与实践》1060.浮点数加法

news2024/11/25 22:52:37

《编程思维与实践》1060.浮点数加法

题目

在这里插入图片描述

思路

浮点数可以分为[整数部分].[小数部分],可以将两个部分分开处理,最后再合并,但在处理四舍五入时较为繁琐,

为了方便起见,这里采用将两个部分一起处理的方式:

由于浮点数不超过500位:整数部分最多500位,小数部分最多500位,

所以加法后的结果整数部分最多501位,小数部分最多500位.

所以可以宏定义L=500,数组最大长度为2L+1,其中[0,L]存整数部分,[L+1,2L+1]存小数部分;

具体步骤:

1.读取浮点数:

①有小数点:找到小数点的位置,小数点前逆向遍历存取整数部分,小数点后正向遍历存取小数部分;

②无小数点(遍历到字符串末尾):从字符串末尾逆向遍历存整数部分.

2.浮点数加法:

先将保留位(N位)后的部分相加,进位后判断保留位的后一位是四舍还是五入;

再将保留位和前面的部分相加,最后进行进位.

3.输出浮点数:

整数部分去除前置0,如果整数部分全为0则输出整数0.

代码

#include<stdio.h>
#include<stdlib.h> 
#include<string.h>
#define L 500

void carry(int *a,int bin);  //进位 
void Input(int *a);   //处理浮点数输入
void add(int *a,int *b,int N);  //顺序加 a+=b
void output(int *a,int N);  //输出

int main()
{
	int A[2*L+1]={0},B[2*L+1]={0},N;
	Input(A);
	Input(B);
	scanf("%d",&N);
	add(A,B,N); 	//A+=B
	output(A,N);
	return 0;
}

void carry(int *a,int bin)  //进位 
{
	int flag=0;
	for(int i=2*L;i>=0;i--)
	{
		int temp=a[i]+flag;
		a[i]=temp%bin;
		flag=temp/bin;
	}
}

void Input(int *a)   //input a float number
{
    char s[L+1];
    scanf("%s",s);    
    int i=0;
    while(i<strlen(s)&&s[i]!='.') //无小数点和有小数点的情况
	{
		i++; 	//定位小数点
	}
    for(int j=i-1,k=L;j>=0;j--) 
    {
    	a[k--]=s[j]-'0';  //整数部分
	}
    for(int j=i+1,k=L+1;j<strlen(s);j++) 
    {
    	a[k++]=s[j]-'0';   //小数部分
	}
}

void add(int *a,int *b,int N)  //顺序加 
{   
	int i;
    for(i=2*L;i>L+N;i--)
    {
        a[i]+=b[i];
    }
    carry(a,10);
    if(a[i+1]>=5)  //保留位的下一位
    {
    	a[i]++;  //四舍五入 
	}
    for(i=L+N;i>=0;i--)
    {
        a[i]+=b[i];
    }
    carry(a,10);
}

void output(int *a,int N)
{
    int i=0;
    while(i<=L&&a[i]==0)
	{
		i++;  //跳过前置0
	}
    if(i>L)   //整数部分全为0
	{
		printf("0");   
	}
    else
    {
        while(i<=L)
		{
			printf("%d",a[i++]);  //整数部分
		}
    }
    printf(".");
    while(i<=L+N)
	{
		printf("%d",a[i++]);  //小数部分
	}
}

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

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

相关文章

gpio 子系统驱动LED

gpio 子系统 API 函数 1、gpio_request 函数 gpio_request 函数用于申请一个 GPIO 管脚&#xff0c;在使用一个 GPIO 之前一定要使用 gpio_request 进行申请&#xff0c;函数原型如下&#xff1a; int gpio_request(unsigned gpio, const char *label)/*函数参数和返回值含义如…

企业应该如何做到数字化转型成功?

01 成长型企业数字化转型的意义 成长型企业想要实现数字化转型&#xff0c;那么我们需要先弄明白&#xff0c;对于成长型企业而言&#xff0c;数字化转型到底具有什么意义&#xff1f;希望实现哪些目标&#xff1f; 可以归结为以下四点&#xff1a; 提升企业的生产力和效率&…

吴恩达机器学习课程的重点内容解析

吴恩达&#xff08;Andrew Ng&#xff09;教授是机器学习领域的知名专家&#xff0c;其机器学习课程在全球范围内备受欢迎。本文将解析吴恩达机器学习课程的重点内容&#xff0c;帮助读者了解机器学习的基本原理、常见算法和实践技巧。 一、机器学习简介 在课程的第一部分&…

今年这面试难度,我给跪了……

大家好&#xff0c;最近有不少小伙伴在后台留言&#xff0c;又得准备面试了&#xff0c;不知道从何下手&#xff01; 不论是跳槽涨薪&#xff0c;还是学习提升&#xff01;先给自己定一个小目标&#xff0c;然后再朝着目标去努力就完事儿了&#xff01; 为了帮大家节约时间&a…

Winforms不可见组件开发

Winforms不可见组件开发 首先介绍基本知识,有很多的朋友搞不清楚Component与Control之间的区别,比较简单形象的区别有下面两点: 1、Component在运行时不能呈现UI,而Control可以在运行时呈现UI。 2、Component是贴在容器Container上的,而Control则是贴…

流控验证太麻烦?不敢上生产?MSE 有办法!

作者&#xff1a;涯客 影响服务稳定性的因素有很多&#xff0c;其中比较常见但又往往容易被忽视的就是面向流量的稳定性&#xff0c;流控是保障服务稳定性的重要手段。但是&#xff0c;我们发现大量客户仅仅在开发环境和预发环境中测试流控&#xff0c;却在生产环境中鲜有使用…

FastJson常用的API整理

工作的时候一直用到fastjson做JavaBean和Json的转化&#xff0c;最近工作的时候对fastjson的API的理解有点混乱&#xff0c;所以做了整理。 一、对象类型梳理 首先要明确在转换中涉及到的五个类型的对象&#xff0c;分别是&#xff1a;JavaObject、JavaObjectList、JsonStrin…

C语言初阶之三子棋

三子棋 初始文件建立主函数文件棋盘的初始化&#xff08;InitBoard&#xff09;打印棋盘&#xff08;DisplayBoard&#xff09;玩家下棋&#xff08;PlayerMove&#xff09;电脑下棋&#xff08;ComputerMove&#xff09;判定胜负所有代码game.hgame.ctest.c 结语 初始文件建立…

一文总结Redis面试知识点

文章目录 Redis知识点知识点1 缓存穿透知识点2 布隆过滤器知识点3 缓存击穿知识点4 缓存雪崩知识点4 双写一致性知识点5 Redis持久化知识点6 数据过期策略知识点7 数据淘汰策略知识点8 分布式锁知识点9 主从复制知识点10 哨兵模式知识点11 分片集群知识点12 IO多路复用 Redis问…

零信任安全:综合网络安全方法

在当今的数字世界&#xff0c;网络威胁日益复杂&#xff0c;使得组织更加难以保护敏感数据和系统的安全。为应对当前的网络威胁&#xff0c;全新的“零信任”安全模型应运而生。 零信任安全作为一种网络安全方法&#xff0c;要求组织必须验证每一次访问尝试&#xff0c;无论访…

云发布的Docker部署文档

云发布的Docker部署文档 文章目录 云发布的Docker部署文档1、服务器安装 Docker2、修改后端微服务的配置2.1 修改 MySQL 的配置2.2 修改 Redis 的配置2.3 修改 Nacos 的配置 3、生成微服务镜像4、拉取远程镜像5、生成前端镜像5.1 准备文件5.2 构建前端镜像 6、基于镜像生成并运…

《编程思维与实践》1062.计算2的N次方

《编程思维与实践》1062.计算2的N次方 题目 思路 法一:直接复用计算a的n次方的代码即可. 法二:注意到 2 30 2^{30} 230在int(32位,第一位为符号位, 2 31 − 1 2^{31}-1 231−1)的范围内,可以直接处理. 注: int范围为 [ − 2 31 , 2 31 − 1 ] [-2^{31},2^{31}-1] [−231,231−…

利用Eigen求解不同坐标系的旋转矩阵

不同坐标系之间的刚性转换以及实现&#xff1a; 坐标系转换原理如下&#xff0c;使用了仿射变换实现了旋转平移&#xff1a; [ r 11 r 12 t x r 21 r 22 t y 0 0 ] ∗ [ x y 1 ] [ x ′ y ′ 1 ] \begin{bmatrix} r_{11} & r_{12}& t_x\\ r_{21}& r_{22}& t…

有没有免费的云渲染平台?

有没有免费的云渲染平台&#xff1f;相信很多人在找云渲染平台的时候都会先网上查找下有没有免费的平台可以使用&#xff0c;而且也确实看到很多云渲染平台写着“免费渲染”&#xff0c;所以这免费是真的免费还是只是一个噱头呢&#xff1f;下面&#xff0c;由前沿的 云渲染平台…

如何应对洗钱犯罪的新变化?探索图数据库在反洗钱中的应用

背景导读 洗钱&#xff0c;即对非法资金的合法化过程。它由违法犯罪集团组织&#xff0c;在躲避银行和执法部门监测情况下&#xff0c;利用违法交易手段对非法收益进行转移&#xff0c;是金融犯罪领域最难发现的活动之一。当前&#xff0c;洗钱团伙日趋集团化、规模化和专业化…

服务熔断Hystrix入门

目录 一. 微服务的核心知识1.1 雪崩效应1.2 服务隔离1.3 熔断降级1.4 服务限流 二. Hystrix介绍三. Hystrix服务熔断的实现方式3.1 Rest 实现熔断3.2 Feign实现服务熔断 四.服务熔断Hystrix高级4.1 Hystrix的监控平台4.2 搭建Hystrix DashBoard监控4.2.1 熔断器的状态4.2.1.1 测…

成为一名高级网络安全工程师,你需要学习什么?

前言 这是我的建议如何成为网络安全工程师&#xff0c;你应该按照下面顺序学习。 简要说明 第一件事你应该学习如何编程&#xff0c;我建议首先学python&#xff0c;然后是java。 &#xff08;非必须&#xff09;接下来学习一些算法和数据结构是很有帮助的&#xff0c;它将帮…

ChatGpt vs 文心一言,谁更厉害

前言 ​ 当下最火的人工智能毫无疑问是大模型的聊天机器人&#xff0c;ChatGpt的出现&#xff0c;让无数人为之惊叹&#xff0c;它聪明、逻辑清晰、又什么都懂&#xff0c;甚至被人们认为是第四次工业革命的开端。AI的大模型之争&#xff0c;美国的OpenAI已经率先拔得头筹&…

Path如何进行环境变量的配置?

开发Java程序&#xff0c;需要使用JDK提供的开发工具(比如javac.exe、java.exe等命令)&#xff0c;而这些工具在JDK的安装目录的 bin目录下&#xff0c;如果不配置环境变量&#xff0c;那么这些命令只可以在该目录下执行。我们不可能把所有的java文件都放到JDK 的bin目录下&…

笛卡尔坐标系和Frenet坐标系

笛卡尔坐标系和Frenet坐标系 Frenet坐标系&#xff0c;自动驾驶“混乱”的源头 【自动驾驶】运动规划丨轨迹规划丨Frenet坐标转换 【自动驾驶】笛卡尔坐标系和frenet坐标系相互转换 轨迹规划作为具有多个非线性约束的高维优化问题&#xff0c;需要消耗大量的计算资源&#xff0…