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]);}
}

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

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

相关文章

AWS WAF 中的验证码和挑战 | 网页抓取时如何解决这个问题

正如许多企业或爬虫用户所知&#xff0c;AWS WAF&#xff08;Web 应用防火墙&#xff09;是一个强大的安全解决方案&#xff0c;旨在保护 Web 应用免受常见的网络攻击和漏洞。其关键功能之一是使用 CAPTCHA 和挑战来区分合法用户和潜在的恶意机器人。虽然这增强了安全性&#x…

【栈与队列】删除字符串中的所有相邻重复项

题目&#xff1a;给出由小写字母组成的字符串 S&#xff0c;重复项删除操作会选择两个相邻且相同的字母&#xff0c;并删除它们。 在 S 上反复执行重复项删除操作&#xff0c;直到无法继续删除。 在完成所有重复项删除操作后返回最终的字符串。答案保证唯一。 分析&#xff…

[C++]24:异常和智能指针

异常和智能指针 一.异常1.C/C的错误&#xff1a;1.C2.C3.三个关键字&#xff1a; 2.使用异常&#xff1a;1.基本概念&#xff1a;2.基本代码&#xff1a;1.基本使用&#xff1a;2.多个捕获&#xff1a;3.任意类型异常的捕获&#xff1a;4.异常的重新抛出&#xff1a; 3.异常安全…

微软将停用 App Center:React Native 开发人员应该使用以下工具

再见,应用中心!你好,EAS + Sentry + GitHub Actions! React Native 开发人员大遗憾:微软宣布将于 2025 年 3 月 31 日关闭Visual Studio App Center。 多年来, Infinite Red一直将 App Center 作为许多 React Native 咨询客户的 CI/CD 流程和开发工作流程的关键部分。它有…

License简介和Licensecc的使用

License简介和Licensecc的使用 License简介什么是LIcense简易License制作加密扫盲对称加密非对称加密 Licensecc使用构建和编译在linux上进行编译UbuntuCentOS 7CentOS 8下载并编译配置编译和测试cmake 后可以跟的参数在Linux上为Windows进行交叉编译 在windos上进行编译MSVC (…

Android反编译apk重新打签名

反编译apk 1.下载反编译工具apktool&#xff0c;可以在官网&#xff08;Install Guide | Apktool&#xff09;上下载最新版本的 Apktool 2.反编译apk文件,生成文件myapp apktool d myapp.apk 3.重新生成apk apktool b myapp -o myapp_new.apk使用 apksigner 签名 APK 文件…

【华为OD机试】二进制差异数(C++ Java JavaScript Python )

题目 题目描述 对于任意两个正整数A和B,定义它们之间的差异值和相似值: **差异值:**A、B转换成二进制后,对于二进制的每一位,对应位置的bit值不相同则为1,否则为0; **相似值:**A、B转换成二进制后,对于二进制的每一位,对应位置的bit值都为1则为1,否则为0; 现在有n个…

项目管理软件如何帮助收尾项目?

项目规划、执行、监测和控制通常是项目管理的重点。即使是项目启动也会受到关注&#xff0c;但项目收尾通常是事后才提及的。 实际上&#xff0c;项目的每个阶段都很重要。项目收尾不仅仅是按时交付、不超预算和达到预期质量。 什么是项目收尾&#xff1f; 项目收尾是项目生…

elementUI的衍生组件,avue的crud表格错位问题

问题描述&#xff1a; 每次从别的页面跳转回来就发现表格显示错位了 一通查 结果发现是有两层表格 解决办法&#xff1a; 根据开发者工具中看到的样式选择器&#xff0c;很粗暴的在全局样式文件中加一个&#xff1a; 效果&#xff1a;

学习记录696@网络安全之认证、报文完整性、密钥分发与证书

认证 即通信双方如何认证对方身份。 这种情况存在问题&#xff1a;trudy可以伪造A的IP地址。就算带上密码也可能被截获&#xff0c;用于重放攻击。 解决重放攻击的办法是随机数挑战&#xff0c;每次认证时&#xff0c;B都发一个挑战码给A。A加密后再传给B&#xff0c;如果B…

恒远世达:把握现在,高考后逆袭,开启日本留学之路!

一年一度的高考已经落幕&#xff0c;马上就要出高考分数了&#xff0c;有人欢喜有人忧&#xff0c;奋斗学习了这么多年&#xff0c;就为了考上一所理想的大学&#xff0c;一旦没考上&#xff0c;心情会非常的低落。 在传统心态中&#xff0c;高考失利意味着人生重大失败&#…

1143. 最长公共子序列(leetcode)

1143. 最长公共子序列&#xff08;leetcode&#xff09; 题目描述 给定两个字符串 text1 和 text2&#xff0c;返回这两个字符串的最长公共子序列的长度。如果不存在公共子序列 &#xff0c;返回 0 。一个字符串的子序列是指这样一个新的字符串&#xff1a;它是由原字符串在不…

BLER,RSRP,SNR,RB,MCS,RI,Tx power之间相互有什么影响?

BLER&#xff08;Block Error Rate&#xff09;、RSRP&#xff08;Reference Signal Received Power&#xff09;、SNR&#xff08;Signal-to-Noise Ratio&#xff09;、RB&#xff08;Resource Block&#xff09;、MCS&#xff08;Modulation and Coding Scheme&#xff09;、…

基于自主发明专利的杰林码哈希算法、对称加密算法和无损压缩算法的可文件追踪管控且支持linux和windows的文件压缩包工具SDK和JLM PACK软件介绍

基于自主发明专利的杰林码哈希算法、对称加密算法和无损压缩算法的可文件追踪管控且支持linux和windows的文件压缩包工具SDK1.0版发布&#xff0c;下载链接为&#xff1a; JLM PACK CSDN下载链接 JLM PACK SDK和软件的官方网站 注意测试授权证书yesine_jlmpack_test.license…

一种改进解卷积算法在旋转机械故障诊断中的应用(MATLAB)

轴承振动是随机振动。在不同的时刻&#xff0c;轴承振动值是不尽相同的&#xff0c;不能用一个确定的时间函数来描述。这是由于滚动体除了有绕轴承公转运动以外&#xff0c;还有绕自身轴线的自旋运动&#xff0c;且在轴承运转时&#xff0c;滚动接触表面形貌是不断变化的&#…

Android与JavaScript的交互,以实现从WebView中打开原生页面并传递参数

在Android应用中&#xff0c;实现Android与JavaScript的交互&#xff0c;以实现从WebView中打开原生页面并传递参数&#xff0c;可以通过以下详细步骤完成&#xff1a; 1. 准备工作 添加WebView至布局&#xff1a;在你的Activity或Fragment的XML布局文件中加入WebView控件。 …

计算机中丢失vcruntime140_1.dll如何修复?分享7种常用解决方法

vcruntime140_1.dll缺失原因分析 软件卸载或更新不当在软件卸载或更新过程中&#xff0c;如果未能正确处理依赖关系&#xff0c;可能会导致vcruntime140_1.dll文件被错误地删除或损坏。 据统计&#xff0c;约有30%的DLL文件丢失问题是由于不当的卸载或更新操作引起的。 用户…

行列视(RCV)在生产型企业中的应用与集控值班员考核体系优化

行列视&#xff08;RCV&#xff09;在生产型企业中的应用主要体现在数据整合、报表制作与可视化、数据分析与决策支持等方面&#xff0c;对于提高生产型企业的工作效率、优化管理流程以及实现数字化转型具有重要意义。而集控值班员考核体系的优化&#xff0c;则关乎于电力集控站…

git 拉下来的项目,出现“加载失败”的解决方法

现象&#xff1a; 1、对加载失败的项目&#xff0c;尝试重新加载 解决思路&#xff1a;根据上面的提示&#xff0c;打开F盘对应的 .vcxproj文件&#xff0c;查看里面关于opencv454.props的内容 先删了&#xff0c;后面再补 2、当前的工作重点是消除加载失败的情况&#xff0c;…