实现两个超长正整数(每个最长80位数字)的减法运算。

 定制魏:QTWZPW,获取更多源码等

[问题描述]


编写程序实现两个超长正整数(每个最长80位数字)的减法运算。


[输入形式]


从键盘读入两个整数,要考虑输入高位可能为0的情况(如00083)。
1.第一行是超长正整数A;
2.第二行是超长正整数B;


[输出形式]


输出只有一行,是长整数A减去长整数B的运算结果,从高到低依次输出各位数字。要求:若结果为0,则只输出一个0;否则输出的结果的最高位不能为0,并且各位数字紧密输出。[输入样例]
234098
134098703578230056


[输出样例]


-134098703577995958


[样例说明]


进行两个正整数减法运算,234098-134098703578230056=-134098703577995958。

c实现

#include <stdio.h>  // 包含标准输入输出库
#include <string.h> // 包含字符串处理库
#define maxsize 100 // 定义最大尺寸为100char a[maxsize];    // 声明字符数组'a',大小为maxsize
char b[maxsize];    // 声明字符数组'b',大小为maxsize
char delta[maxsize]; // 声明字符数组'delta',大小为maxsize
int a_num, b_num, d_num; // 声明整型变量a_num, b_num, d_numint i, j, k, len; // 声明整型变量i, j, k, len
char c; // 声明字符变量c
int flag=1; // 声明整型变量flag,并初始化为1void reverse(char s[]){int len = strlen(s);for(i=0,j=len-1;i<j;i++,j--){c=s[i];s[i]=s[j];s[j]=c;}
}void deletechar(char s[],char c){int length=strlen(s);int i,j;for(i=0,j=0;s[i]!='\0';i++){if(s[i]!=c)s[j++]=s[i];}s[j]='\0';
}void substract(char a[],char b[]){for(i=0;i<len;i++){a_num=a[i]-'0';b_num=b[i]-'0';if(a_num>=b_num)delta[i]='0'+a_num-b_num;else{delta[i]='0'+10+a_num-b_num;if(i!=len-1)a[i+1]=a[i+1]-1;}}
}int main()
{gets(a); // 获取输入的第一个大整数gets(b); // 获取输入的第二个大整数deletechar(a,' '); // 删除第一个大整数中的空格deletechar(b,' '); // 删除第二个大整数中的空格reverse(a); // 反转第一个大整数reverse(b); // 反转第二个大整数int len_a=strlen(a); // 获取第一个大整数的长度int len_b=strlen(b); // 获取第二个大整数的长度// 将两个大整数补齐成相同长度if(len_a > len_b){for(i = len_b; i < len_a; i++)b[i]='0';} else {for(i = len_a; i < len_b; i++)a[i]='0';if(len_b > len_a)flag = -1;else {for(i = 0; i < len_a; i++){if(a[i] < b[i]){flag = -1;break;}}}}len = (len_a > len_b) ? len_a : len_b; // 计算最终的长度// 根据标志位进行相减操作if(flag == -1)substract(b, a);elsesubstract(a, b);reverse(delta); // 反转结果if(flag == -1)printf("-"); // 输出结果前添加负号// 输出最终结果for(i = 0; i < len && delta[i] == '0'; i++);if(i == len)printf("0\n");else{for(; i < len; i++)printf("%c", delta[i]);}
}

 c++实现

#include <iostream>  // 包含标准输入输出流库
#include <string>    // 包含字符串处理库
#include <algorithm> // 包含算法库using namespace std; // 使用标准命名空间#define maxsize 100 // 定义最大尺寸为100string a;    // 声明字符串'a'
string b;    // 声明字符串'b'
string delta; // 声明字符串'delta'int a_num, b_num, d_num; // 声明整型变量a_num, b_num, d_numint i, j, k, len; // 声明整型变量i, j, k, len
char c; // 声明字符变量c
int flag=1; // 声明整型变量flag,并初始化为1void reverse(string &s) {int len = s.length();for (i = 0, j = len - 1; i < j; i++, j--) {c = s[i];s[i] = s[j];s[j] = c;}
}void deletechar(string &s, char c) {s.erase(remove_if(s.begin(), s.end(), [c](char x){return x == c;}), s.end());
}void substract(string &a, string &b) {for (i = 0; i < len; i++) {a_num = a[i] - '0';b_num = b[i] - '0';if (a_num >= b_num)delta[i] = '0' + a_num - b_num;else {delta[i] = '0' + 10 + a_num - b_num;if (i != len - 1)a[i + 1] = a[i + 1] - 1;}}
}int main() {getline(cin, a); // 获取输入的第一个大整数getline(cin, b); // 获取输入的第二个大整数deletechar(a, ' '); // 删除第一个大整数中的空格deletechar(b, ' '); // 删除第二个大整数中的空格reverse(a); // 反转第一个大整数reverse(b); // 反转第二个大整数int len_a = a.length(); // 获取第一个大整数的长度int len_b = b.length(); // 获取第二个大整数的长度// 将两个大整数补齐成相同长度if (len_a > len_b) {b.append(len_a - len_b, '0');} else {a.append(len_b - len_a, '0');if (len_b > len_a)flag = -1;else {for (i = 0; i < len_a; i++) {if (a[i] < b[i]) {flag = -1;break;}}}}len = max(len_a, len_b); // 计算最终的长度delta.resize(len); // 调整delta的大小// 根据标志位进行相减操作if (flag == -1)substract(b, a);elsesubstract(a, b);reverse(delta); // 反转结果if (flag == -1)cout << "-"; // 输出结果前添加负号// 输出最终结果for (i = 0; i < len && delta[i] == '0'; i++);if (i == len)cout << "0" << endl;else {for (; i < len; i++)cout << delta[i];cout << endl;}
}


 

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

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

相关文章

ts版本微信小程序在wxml保存文件不刷新页面的解决办法

将project.config.json中的skylineRenderEnable改为false "skylineRenderEnable": false

惯导系统静止初始化方法与代码实现并在gazebo中测试

惯导系统静止初始化方法与代码实现并在gazebo中测试 前言静止初始化方法惯导静止初始化实现代码在gazebo中进行测试 前言 在进行GPS加IMU的组合导航或者Lidar加IMU的组合导航时&#xff0c;用EKF或者ESKF的滤波方法时&#xff0c;需要提前知道惯导的测量噪声、初始零偏、重力方…

POJO简介

文章目录 简介POJO与ELB的区别POJO真正的意思 常见的POJO类DTODAOPOVOEntity 简介 什么是POJO&#xff1f;POJO&#xff08;Plain Ordinary Java Object&#xff09;简单的Java对象&#xff0c;实际就是普通JavaBeans&#xff0c;是为了避免和EJB(EJB是Enterprise Java Beans技…

滑模控制算法(SMC)讲解-案例(附C代码)

目录 一、滑模控制算法的基本原理 1)滑模面(Sliding Surface)的设计 2)达到条件(Reaching Condition)

Ubuntu 22.04 Nvidia Audio2Face Error:Failed to build TensorRT engine

背景 1.在Ubuntu22.04上安装Audio2Face后启动&#xff0c;嘴形不会实时同步。控制台显示如【图一】&#xff1a; 【图一】 2.log日志如下: Error: Error during running command: [‘/home/admin/omniverse/libs/deps/321b626abba810c3f8d1dd4d247d2967/exts/omni.audio2fac…

单片机之从C语言基础到专家编程 - 4 C语言基础 - 4.11函数

在单片机开发中&#xff0c;一般使用C语言进行编程&#xff0c;C语言提供了一种结构化的编程方法&#xff0c;能有效地管理和控制硬件资源。函数是C语言中的一个基本构建块&#xff0c;它允许开发者将程序分解成更小、更易于管理的部分。 1 函数的基本概念 1&#xff09;定义…

【论文阅读】DiffSpeaker: Speech-Driven 3D Facial Animation with Diffusion Transformer

DiffSpeaker: 使用扩散Transformer进行语音驱动的3D面部动画 code&#xff1a;GitHub - theEricMa/DiffSpeaker: This is the official repository for DiffSpeaker: Speech-Driven 3D Facial Animation with Diffusion Transformer paper&#xff1a;https://arxiv.org/pdf/…

clickhouse学习笔记01(小滴课堂)

老王经历-数据库架构演变历史 你是否能分清OLTP和OLAP系统 急速掌握-数据库里面行存储和列式存储 新一代列式存储ClickHouse介绍和应用场景说明 Linux服务器容器化部署ClickHouse实战 记得要在安全组里配置开放端口号。 到这我们就安装完了。 简单使用&#xff1a; 创建你的第…

鲲鹏920集成100G网卡RDMA测试说明

1、背景介绍 目前鲲鹏920处理器内集成了两个100G网卡&#xff0c;支持RDMA&#xff08;Roce V2&#xff09;&#xff0c;说明如下 为了测试网卡性能&#xff0c;需要进行RDMA测试&#xff0c;两块鲲鹏920的板卡通过盛科的8180 100G交换芯片实现交换功能。 盛科8180芯片介绍如下…

2.亿级积分数据分库分表:增量数据同步之代码双写,为什么没用Canal?

1.亿级积分数据分库分表&#xff1a;总体方案设计 上一篇博客中写了一下积分数据分库分表的总体方案设计&#xff0c;里面说了采用应用程序代码双写的方式实现的增量数据同步&#xff0c;本篇就对这一块进行一些细化的介绍&#xff0c;包括&#xff1a; 为什么不用Canal监听数…

Acwing:730. 机器人跳跃问题(二分法)

问题描述&#xff1a; 题目链接&#xff1a;730. 机器人跳跃问题 机器人正在玩一个古老的基于 DOS 的游戏。游戏中有 N1 座建筑——从 0 到 N 编号&#xff0c;从左到右排列。编号为 0 的建筑高度为 0个单位&#xff0c;编号为 i的建筑高度为 H(i) 个单位。 起初&#xff0c;机…

【S5PV210】 | GPIO编程

【S5PV210】 | GPIO编程 时间:2024年3月17日22:02:32 目录 [TOC] 1.参考 1.s5pv210开发与学习:1.5之裸机汇编流水点灯_s5pv210汇编指令集-CSDN博客 2.s5pv210开发与学习:1.8之裸机蜂鸣器实验_pv210 蜂鸣器-CSDN博客 3.s5pv210开发与学习:1.9之裸机按键控制LED_s5pv210 按键…

机器学习——压缩网络作业

文章目录 任务描述介绍知识蒸馏网络设计 Baseline实践 任务描述 网络压缩&#xff1a;使用小模型模拟大模型的预测/准确性。在这个任务中&#xff0c;需要训练一个非常小的模型来完成HW3&#xff0c;即在food-11数据集上进行分类。 介绍 有许多种网络/模型压缩的类型&#xff0…

法律数字化与AI大模型的结合正在带来行业新变革

法律数字化与AI大模型的结合&#xff0c;正在逐步改变法律行业的传统运作方式&#xff0c;为法律从业者提供更加高效、精准的服务&#xff0c;同时也为公众提供了更加便捷的法律咨询和解决方案。 蚓链AI大模型在法律数字化过程中起到了关键作用。AI模型通过自然语言处理、机器…

【自学用】B站python爬虫课程笔记(Q11-15)

下面是学习的网址&#xff1a; ​​​​​​【Python爬虫】 11、class定义类别的一些问题 我写的"可爱小猫类别"的代码如下&#xff1a; class CuteCat:def __init__(self, cat_name, cat_age, cat_color, cat_temper):# cat_name name# self_name cat_name #…

Spring--注解

一、简介 Spring注解是一种元数据形式的代码&#xff0c;用于提供配置信息&#xff0c;从而减少XML配置文件的使用。Spring框架提供了一系列的注解&#xff0c;用于简化Spring应用程序的开发。通过使用这些注解&#xff0c;开发者可以在不编写大量XML配置的情况下&#xff0c;…

代码随想录day23(2)二叉树:从中序与后序遍历序列构造二叉树(leetcode106)

题目要求&#xff1a;根据一棵树的中序遍历与后序遍历构造二叉树。 思路&#xff1a;408的经典题目&#xff0c;思路和手撕的思路差不多&#xff0c;先从后序中找到根节点&#xff0c;再从中序中找到此节点&#xff0c;然后分割成左右子树&#xff0c;记录一下左右子树的节点个…

PyQt5使用

安装Pyqt5信号与槽使用可视化界面编辑UI (Pyside2)ui生成之后的使用(两种方法)1 ui转化为py文件 进行import2 动态调用UI文件 安装Pyqt5 pip install pyqt5-tools这时候我们使用纯代码实现一个简单的界面 from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButto…

2024 年(第 12 届)“泰迪杯”数据挖掘挑战赛——B 题:基于多模态特征融合的图像文本检索完整思路与源代码分享

一、问题背景 随着近年来智能终端设备和多媒体社交网络平台的飞速发展&#xff0c;多媒体数据呈现海量增长 的趋势&#xff0c;使当今主流的社交网络平台充斥着海量的文本、图像等多模态媒体数据&#xff0c;也使得人 们对不同模态数据之间互相检索的需求不断增加。有效的信…

Rocket MQ 从入门到实践

为什么要使用消息队列&#xff0c;解决什么问题&#xff1f;&#xff08;消峰、解藕、异步&#xff09; 消峰填谷 客户端》 网关 〉 消息队列》秒杀服务 异步解耦 消息队列中的重要概念理解。&#xff08;主题、消费组、队列&#xff0c;游标&#xff1f;&#xff09; 主题&…