1.8 无符号大数加、减运算
作者 李卫明
单位 杭州电子科技大学
1.8 无符号大数加、减运算。程序设计中经常遇到无符号大数加、减运算问题,请在样例程序Ex1.4基础上实现无符号大数减运算。题目要求输入两个无符号大数,保证一个大数不小于第二个大数,输出它们的和、差。
输入格式:
两个无符号大数,前一个大于等于第二个。
输出格式:
第1行为两个无符号大数相加结果,后一行为两个无符号大数相减结果。
输入样例:
1234567890987654321333888999666
147655765659657669789687967867
输出样例:
在这里给出相应的输出。例如:
1234567890987654321333888999666+147655765659657669789687967867=1382223656647311991123576967533
1234567890987654321333888999666-147655765659657669789687967867=1086912125327996651544201031799
代码长度限制
16 KB
时间限制
4000 ms
内存限制
64 MB
栈限制
8192 KB
C程序如下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>#define Maxsize 1000typedef struct Number {//定义结构体字符串char data[Maxsize];//定义Data的最大值int place;//当前数组的长度int size;//数组的最大长度
} Number, *num;num Init();//初始化字符串
void Append(num number);//向字符串中加字符
void InvertArray(num number);//反转字符串
num add(num big, num small, num sum);//对两个字符串做加法
num subtract(num big, num small, num difference);//对两个字符串做减法
void Display(num end);//输出运算结果int main() {num big = Init();//初始化较大的字符串num small = Init();//初始化较小的字符串num sum = Init();//初始化加法字符串num difference = Init();//初始化减法字符串Append(big);//向较大字符串中加入字符Append(small);//向较小字符串中加入字符InvertArray(big);//反转较大字符串InvertArray(small);//反转较小的字符串Display(big);printf("+");Display(small);printf("=");sum = add(big, small, sum);//求和Display(sum);//输出结果printf("\n");Display(big);printf("-");Display(small);printf("=");difference = subtract(big, small, difference);//求差Display(difference);//输出结果printf("\n");return 0;
}num Init() {num New = (num)malloc(sizeof(Number));//向内存申请一片空间New->place = 0;//初始化字符串的长度为0New->size = Maxsize;//初始化字符串的最大值为Maxsizereturn New;//返回申请空间的内存首地址
}void Append(num number) {char s;while ((s = getchar()) != '\n' && s != EOF) {//读取字符串,如果读取成功则进入循环if (s >= '0' && s <= '9') {number->data[number->place++] = s - '0';//读入数字且长度加一}}number->data[number->place] = '\0';//注意在字符串之后加上结束符
}void InvertArray(num number) {char temp;for (int i = 0; i < number->place / 2; i++) {//循环字符串长度的一半即可完成反转temp = number->data[i];number->data[i] = number->data[number->place - i - 1];number->data[number->place - i - 1] = temp;}
}num add(num big, num small, num sum) {int carry = 0, i;//carry为进位for (i = 0; i < big->place || i < small->place || carry; i++) {//只要其中一个没有读取完就继续读取int digit1 = big->data[i];//取出较大数的第一位,因为反转过,所以第一位就是个位int digit2 = small->data[i];//同理取较小数的个位int result = digit1 + digit2 + carry;//两数相加再加上进位,第一次相加时进位为0sum->data[i] = result % 10;//结果取余后即为最终的结果carry = result / 10;//进位数更新}sum->place = i;//最终的i即为答案的长度return sum;
}num subtract(num big, num small, num difference) {int borrow = 0, i;//borrow为借位for (i = 0; i < big->place; i++) {int digit1 = big->data[i];int digit2 = small->data[i];int result = digit1 - digit2 - borrow;//结果相减再减去上一次的借位,第一次借位为0if (result < 0) {//若答案小于0result += 10;//则向上一位再借一,即加十borrow = 1;//借位赋值为1} else {borrow = 0;//否则借位为0}difference->data[i] = result;}difference->place = i;//此时字符串长度为i的值while (difference->place > 1 && difference->data[difference->place - 1] == 0) {difference->place--;//去掉最高位的0.因为两数相减很可能会出现前几位为0的情况}return difference;//返回相减后的结果
}void Display(num end) {for (int i = end->place - 1; i >= 0; i--) {//倒序输出结果printf("%d", end->data[i]);}
}
相关文章:
1.8 无符号大数加、减运算
作者 李卫明 单位 杭州电子科技大学 1.8 无符号大数加、减运算。程序设计中经常遇到无符号大数加、减运算问题,请在样例程序Ex1.4基础上实现无符号大数减运算。题目要求输入两个无符号大数,保证一个大数不小于第二个大数,输出它们的和、差。…...
Java常用类--包装类
包装类 一方面出于性能方面的考虑,java为数值使用基本类型,而不是对象。基本类型不是对象层次的组成部分,它们不继承Object。 另一方面有时需要创建表示基本类型的对象,例如集合类只处理对象。为了在类中存储基本类型,…...
SpringMvcの拦截器全局异常处理
一、拦截器 我们在网上发贴子的时候如果没有登录,点击发送按钮会提示未进行登录,跳转到登录页面。这样的功能是如何实现的。 1、 拦截器的作用 Spring MVC 的处理器拦截器类似于Servlet开发中的过滤器Filter,用于对处理器进行预处理和后处理…...
JVM虚拟机的组成
一、为什么要学习 JVM ? 1. “ ⾯试造⽕箭,⼯作拧螺丝” , JVM 属于⾯试官特别喜欢提问的知识点; 2. 未来在⼯作场景中,也许你会遇到以下场景: 线上系统突然宕机,系统⽆法访问,甚⾄直…...
探索CSS clip-path: polygon():塑造元素的无限可能
在CSS的世界里,clip-path 属性赋予了开发者前所未有的能力,让他们能够以非传统的方式裁剪页面元素,创造出独特的视觉效果。其中,polygon() 函数尤其强大,它允许你使用多边形来定义裁剪区域的形状,从而实现各…...
【华为OD机试B卷】单词接龙(C++/Java/Python)
题目 题目描述 单词接龙的规则是: 可用于接龙的单词首字母必须要前一个单词的尾字母相同;当存在多个首字母相同的单词时,取长度最长的单词,如果长度也相等,则取字典序最小的单词;已经参与接龙的单词不能重复使用。现给定一组全部由小写字母组成单词数组,并指定其中的一个…...
项目实训-vue(十七)
项目实训-vue(十七) 文章目录 项目实训-vue(十七)1.概述2.问诊类型3.问诊时间统计4.看诊时间统计 1.概述 本篇博客将记录我在数据统计页面中的工作。因为项目并未实际运行,因此我们拟定了一些数据,并构建了…...
Android10 SystemUI系列 需求定制(二)隐藏状态栏通知图标,锁屏通知,可定制包名,渠道等
一、前言 SystemUI 所包含的界面和模块比较多,这一节主要分享一下状态栏通知图标和通知栏的定制需求:隐藏状态栏通知图标,锁屏通知,可定制包名,渠道等 来熟悉一下Systemui。 二、准备工作 按照惯例先找到核心类。这里提前说一下,这个需求的修改方法更多,笔者这里也只…...
Linux:RAID磁盘阵列
目录 一、RAID(磁盘阵列) 1.1、概念 1.2、RAID 0(条带化存储) 1.3、RAID 1(镜像存储) 1.4、RAID 5 1.5、RAID 6 1.6、RAID 10 (先做镜像,再做条带) 二、创建RAID 2.1、建立RAID 0 …...
MongoDB和AI 赋能行业应用:零售
欢迎阅读“MongoDB 和 AI 赋能行业应用”系列的第三篇。 本系列重点介绍 AI 应用于不同行业的关键用例,涵盖制造业和汽车行业、金融服务、零售、电信和媒体、保险以及医疗保健行业。 利用生成式 AI 技术(Gen AI),零售商可以创造…...
MQ~消息队列能力、AMQP协议、现有选择(Kafka、RabbitMQ、RocketMQ 、Pulsar)
消息队列 消息队列看作是一个存放消息的容器,当我们需要使用消息的时候,直接从容器中取出消息供自己使用即可。由于队列 Queue 是一种先进先出的数据结构,所以消费消息时也是按照顺序来消费的。 常⽤的消息队列主要这 五 种,分别…...
开源网安参与编制的《代码大模型安全风险防范能力要求及评估方法》正式发布
代码大模型在代码生成、代码翻译、代码补全、错误定位与修复、自动化测试等方面为研发人员带来了极大便利的同时,也带来了对安全风险防范能力的挑战。基于此,中国信通院依托中国人工智能产业发展联盟(AIIA),联合开源…...
【树状数组 队列】1505. 最多 K 次交换相邻数位后得到的最小整数
本文涉及知识点 树状数组 队列 LeetCode1505. 最多 K 次交换相邻数位后得到的最小整数 给你一个字符串 num 和一个整数 k 。其中,num 表示一个很大的整数,字符串中的每个字符依次对应整数上的各个 数位 。 你可以交换这个整数相邻数位的数字 最多 k 次…...
【附精彩文章合辑】当谈到程序的“通用性”与“过度设计”的困境时,我们可以通过一些具体的例子来更直观地阐述这些解决方案
当谈到程序的“通用性”与“过度设计”的困境时,我们可以通过一些具体的例子来更直观地阐述这些解决方案。以下是一些示例: 一、明确需求与目标 例子1:在线购物平台 需求分析:平台需要支持用户注册、登录、浏览商品、下单购买、…...
Word中删除空白页
① 文字后面出现的空白页 把鼠标放在空白页的位置,按住Ctrl Delete即可。 ② 表格后面的空白页 把鼠标放在空白页左侧,直到出现一个空白的箭头,点击一下选中空白页,然后再Ctrl D,打开字体选项卡,在效果中…...
30.Netty进阶-黏包半包解决方案-短链接
客户端发送一次完整的消息,然后就把与服务端的链接断开。服务端读到的结果就是-1。 服务器就知道 从链接建立到断开,发送的数据是一条完整的数据。 客户端代码 package com.xkj.nian;import io.netty.bootstrap.Bootstrap; import io.netty.buffer.ByteBuf; import io.net…...
斜堆(数据结构篇)
数据结构之斜堆 斜堆 概念: 斜堆是左式堆的自调节形式,斜堆和左式堆间的关系类似于伸展树和AVL树间的关系斜堆是具有堆序性的二叉树,但是不存在对树的结构限制不同于左式堆,关于任意节点的零路径长的任何信息都不保留ÿ…...
河南大学24计算机考研数据,有三个学院招收计算机相关专业,都是考的408!
河南大学(Henan University),简称“河大”,是河南省人民政府与中华人民共和国教育部共建高校,国家“双一流”建设高校,入选国家“111计划”、中西部高校基础能力建设工程、卓越医生教育培养计划、卓越法律人…...
ubuntu离线安装docker导入镜像
docker安装包 准备工作 1.准备一个docker.service文件 内容如下: [Unit] DescriptionDocker Application Container Engine Documentationhttps://docs.docker.com Afternetwork-online.target firewalld.service Wantsnetwork-online.target[Service] Typenoti…...
鸿蒙原生应用元服务开发-位置服务申请权限
申请位置权限开发指导 场景概述 应用在使用位置服务系统能力前,需要检查是否已经获取用户授权访问设备位置信息。如未获得授权,可以向用户申请需要的位置权限。 系统提供的定位权限有: ohos.permission.LOCATION:用于获取精准位置…...
Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)
概述 在 Swift 开发语言中,各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过,在涉及到多个子类派生于基类进行多态模拟的场景下,…...
[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...
Linux-07 ubuntu 的 chrome 启动不了
文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了,报错如下四、启动不了,解决如下 总结 问题原因 在应用中可以看到chrome,但是打不开(说明:原来的ubuntu系统出问题了,这个是备用的硬盘&a…...
(转)什么是DockerCompose?它有什么作用?
一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用,而无需手动一个个创建和运行容器。 Compose文件是一个文本文件,通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...
【HTTP三个基础问题】
面试官您好!HTTP是超文本传输协议,是互联网上客户端和服务器之间传输超文本数据(比如文字、图片、音频、视频等)的核心协议,当前互联网应用最广泛的版本是HTTP1.1,它基于经典的C/S模型,也就是客…...
Git 3天2K星标:Datawhale 的 Happy-LLM 项目介绍(附教程)
引言 在人工智能飞速发展的今天,大语言模型(Large Language Models, LLMs)已成为技术领域的焦点。从智能写作到代码生成,LLM 的应用场景不断扩展,深刻改变了我们的工作和生活方式。然而,理解这些模型的内部…...
深入浅出Diffusion模型:从原理到实践的全方位教程
I. 引言:生成式AI的黎明 – Diffusion模型是什么? 近年来,生成式人工智能(Generative AI)领域取得了爆炸性的进展,模型能够根据简单的文本提示创作出逼真的图像、连贯的文本,乃至更多令人惊叹的…...
【SpringBoot自动化部署】
SpringBoot自动化部署方法 使用Jenkins进行持续集成与部署 Jenkins是最常用的自动化部署工具之一,能够实现代码拉取、构建、测试和部署的全流程自动化。 配置Jenkins任务时,需要添加Git仓库地址和凭证,设置构建触发器(如GitHub…...
C++--string的模拟实现
一,引言 string的模拟实现是只对string对象中给的主要功能经行模拟实现,其目的是加强对string的底层了解,以便于在以后的学习或者工作中更加熟练的使用string。本文中的代码仅供参考并不唯一。 二,默认成员函数 string主要有三个成员变量,…...
2025 后端自学UNIAPP【项目实战:旅游项目】7、景点详情页面【完结】
1、获取景点详情的请求【my_api.js】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口(适配服务端返回 Token) export const login async (code, avatar) > {const res await http(/login/getWXSessionKey, {code,avatar}); };//…...
