大整数1000位包括正负数的加减运算
代码如下
#include <stdio.h>
#include <string.h>
#include <math.h>
void printf_arr(int* arr) { // 输出数组的值
for (int i = arr[0]; i > 0; i--) {
printf("%d", arr[i]);
}
printf("\n");
return;
}
int big_add(int* a, int* b, int* ans_ab) {
ans_ab[0] = a[0] > b[0] ? a[0] : b[0]; // 和的长度
int min = a[0] <b[0] ? a[0] : b[0];
for (int i = 1; i <= ans_ab[0]; i++) {
if(i<=min) ans_ab[i] = a[i] + b[i]; // 加法运算
if (i > min && a[0] == min) ans_ab[i] = b[i];
if (i > min && b[0] == min) ans_ab[i] = a[i];
}
for (int i = 1; i <= ans_ab[0]; i++) { // 处理进位
if (ans_ab[i] > 9)
{
ans_ab[i + 1] += ans_ab[i] / 10;//进几个十
ans_ab[i] %= 10;//剩下的个位数字
if (i == ans_ab[0]) ans_ab[0]++; // 最高位大于9,长度+1
}
}
return 1;
}
void jiafa(int n1[], int n2[])
{
int ans[1005] = { 0 };
//2、 算法计算-------------------
big_add(n1, n2, ans);
printf_arr(ans);
}
// 交换两个数组
void swap_arr(int* n1, int* n2) {
int max_len = n1[0] > n2[0] ? n1[0] : n2[0];
int temp;
for (int i = 0; i <= max_len; i++) {
temp = n2[i];
n2[i] = n1[i];
n1[i] = temp;
}
return;
}
// 计算大整数减法 n1 - n2
int jianfa(int n1[], int n2[]) {
int ans[1005] = { 0 };
int flag = 1; // 如果 n1 > n2 即 flag = 1
if (n1[0] < n2[0]) flag = 0;
if (n1[0] == n2[0]) {//位数相同的话
int i = n1[0],k=n1[0];
while (i > 0) {
if (n1[i] == n2[i]) i--,k--;
if (n1[i] > n2[i]) i = 0; // 要考虑每位都大的情况
if (n1[i] < n2[i]) {
flag = 0;
break;
}
}
if (i == 0&&k==0) {
printf("%d\n", 0); // 位数相等,每一位也相等,差值为0
return 0;
}
}
if (flag == 0) swap_arr(n1, n2); // n1 < n2 交换相减
for (int i = 1; i <= n1[0]; i++) {
if (n1[i] < n2[i]) {
n1[i] += 10;
n1[i + 1] -= 1;
}
if (n1[i] >= 0 && n2[i] >= 0) ans[i] = n1[i] - n2[i];
if (n1[i] >= 0 && n2[i] == -3) ans[i] = n1[i] - 0;
}
if (flag == 0) printf("-");
int flag_0 = 0; // 判断当前的0是否要输出,如果之前输出过正整数,则当前的0需要输出
for (int i = n1[0]; i > 0; i--) {
if (ans[i]) printf("%d", ans[i]), flag_0 = 1;
if (ans[i] == 0 && flag_0 == 1) printf("%d", 0);
}
思路借鉴于
我用#CSDN#这个app发现了有技术含量的博客,小伙伴们求同去《大整数(1000位)的加减乘除运算》, 一起来围观吧 https://blog.csdn.net/wu496963386/article/details/121793548?utm_source=app&app_version=5.2.1&code=app_1562916241&uLinkId=usr1mkqgl919blen
大整数1000位包括正负数的加减运算相关推荐
- c语言任意两个整数相减_大整数加减运算的C语言实现
大整数加减运算的 C 语言实现 一 . 问题提出培训老师给出一个题目:用 C 语言实现一 个大整数计算器.初步要求支持大整数的加.减运算,例如 8888888888888+1112=888888889 ...
- 第三次笔记:算术逻辑单元 电路基本原理 加法器的设计 一位全加器 串行进位加法器 并行进位加法器 补码加减运算器 无符号整数加减法 标志位的生成
文章目录 算术逻辑单元 逻辑运算 一位全加器 串行进位加法器 并行进位加法器 补码加减运算器 加法器原理 补码加法器原理 无符号整数加减法 标志位的生成 算术逻辑单元 算术逻辑单元就是运算器里面的AL ...
- php 超大整数计算,PHP int 超大溢出整数的 加减运算函数,如果有更好的方法欢迎探讨...
[分享]PHP int 超大溢出整数的 加减运算函数,如果有更好的方法欢迎探讨 分享一个溢出整数加减的运算函数,刚刚写的,对于溢出的整数可以用这个来进行加减运算. 遗憾的几点是: 一代码太多: 二只有 ...
- php中超过int真么办,PHP int 超大溢出整数的 加减运算函数,如果有更好的方法欢迎探讨...
[分享]PHP int 超大溢出整数的 加减运算函数,如果有更好的方法欢迎探讨 分享一个溢出整数加减的运算函数,刚刚写的,对于溢出的整数可以用这个来进行加减运算. 遗憾的几点是: 一代码太多: 二只有 ...
- 【计算机组成原理 数字逻辑 Verilog】32位加法器的实现:支持整数的加减运算
目录 0 前言 0.1 使用环境 0.2 知识点 0.3 注意事项 1 建模:1位加法器 1.1 构建基础模型 1.1.1 一位加法器 1.1.1.1 科技黑箱:外部端口与功能 1.1.1.2 揭秘黑 ...
- 整数加减运算的二进制表示
两位整数的加减都可看做 一个数加上另一个数,首先我们要把数据的二进制表示转化成补码,因为在计算机内部,数据的加减是按补码进行运算的. A补+B补=(A+B)补(mod 2^n+1) 连同符号位相加,符 ...
- 【嵙大OJ】Problem 1475: 掰手指头学加减
Problem D: 掰手指头学加减 Time Limit: 1 Sec Memory Limit: 128 MB Submit: 762 Solved: 412 [Submit][Status] ...
- 正则匹配——python用一个正则表达式从字符串中提取数字(包括整数、小数、正负数)
import re# 从字符串中提取数字 totalCount = '-100,abc2.4-123s,d-1ds-0.234as123.2s1.3bb.24' count = re.findall( ...
- JS input校验只能输入数字(包括正负数、小数)
今天做项目刚好遇到对input进行校验的问题,就在网上搜索研究了一下,发现目前多数的校验方法都不行或者是不全面,就试着自己写了一个,刚开始选择直接用正则表达式,发现还是高估自己了('_'),世上无难事 ...
最新文章
- hbase源码系列(十二)Get、Scan在服务端是如何处理?
- 高清重制版阿波罗11号录像,英伟达RTX还原50年前登月细节
- %02 java_02-java
- 学好python需要多久-python入门要学多久
- logging日志配置,day95下午
- Entity Framework6学习笔记(一)
- D1net阅闻:Google Analytics增AI自动化分析功能
- 微信第一个“小程序”亮相:不是APP胜似APP!
- FMCW毫米波雷达原理
- centos yum方式安装nginx 并支持https
- 基于Modbus TCP的MCGS上位机软件教程
- java--javassist学习
- 综合集团如何利用oa系统实现协同办公
- Protected multilib versions XXX
- 服务器中修改数据库配置,服务器修改数据库配置未生效
- 血手耳机与笔记本驱动冲突
- 测试当前访问百度的IP地址(代理IP)
- 微软新Logo四色代表什么?Win8/Office/Xbox等
- 关于读书的一些方法--摘自李笑来《人人都能用英语》
- (转)tomcat与地址栏图标之研究(多浏览器)