当前位置: 首页 > news >正文

2023-10-26 用C语言实现一个大整数加法


点击 <C 语言编程核心突破> 快速C语言入门


用C语言实现一个大整数加法

  • 前言
  • 一、思路和代码设计
    • 数字对齐:
    • 字符对齐:
  • 二、代码
  • 总结


前言

要解决问题: 实现大整数加法

想到的思路: 用字符代替数字, 逐个计算, 过10进位.

其它的补充: 同样思路可以解决减法, 乘法, 但除法没有想到如何解决.


一、思路和代码设计

C语言的整型都是有位数限制的, 用字符代替整型进行计算, 然后输出可能是比较直接的解决思路.

加法有两个问题要解决, 对齐以及进位.

加法算式是右对齐, 字符串则是左对齐, 比较可行的方案是字符串计算前倒置, 算出结果后再倒置回来.

数字对齐:

数字对齐

字符对齐:

字符对齐

进位则要将相应位置的结果除以十, 余数留下, 商作为一个修正, 和向后移动一位字符的位置的数字计算结果相加.

二、代码

#include <stdio.h>
#include <string.h>#define MAX_LEN 1024char lhs[MAX_LEN];
char rhs[MAX_LEN];
char result[MAX_LEN];int reverse(char *str);
void add(char *lhs, char *rhs, char *result);int main()
{scanf("%s %s", lhs, rhs);add(lhs, rhs, result);printf("%s\n", result);return 0;
}int reverse(char *str)
{const int len = (int)strlen(str);char temp;for (int i = 0; i != len / 2; i++){temp = str[i];str[i] = str[len - i - 1];str[len - i - 1] = temp;}return len;
}void add(char *lhs, char *rhs, char *result)
{int lhsLen = reverse(lhs);int rhsLen = reverse(rhs);int carry = 0;const int ten = 10;for (int i = 0, j = 0, sum; i < lhsLen || j < rhsLen; i++, j++){sum = (i < lhsLen ? lhs[i] - '0' : 0) +(j < rhsLen ? rhs[j] - '0' : 0) + carry;result[i] = (char)(sum % ten + '0');carry = sum / ten;}int maxLen = lhsLen > rhsLen ? lhsLen : rhsLen;if (carry > 0){result[maxLen++] = (char)(carry + '0');}result[maxLen] = '\0';reverse(result);
}

总结

用C语言实现大整数加法, 就是将数学的基本运算翻译为程序, 可能实现的效率不一定很高, 相比较整型原生的计算, 但作为一个学习材料还是可以的.


点击 <C 语言编程核心突破> 快速C语言入门


http://www.lryc.cn/news/207804.html

相关文章:

  • [hive] 窗口函数 ROW_NUMBER()
  • TensorFlow和Pytorch两种机器学习框架的比较及优缺点
  • “Can‘t open workbook - unsupported file type: XML“
  • 达芬奇MacOS最新中文版 DaVinci Resolve Studio 18中文注册秘钥
  • 电脑扬声器未插入?4个方法帮你恢复声音!
  • Python - 通过/SSH 获取远程主机的 env 变量
  • ubuntu 下的 使用anaconda 环境运行python 项目
  • MySQL创建定时任务定时执行sql
  • 如何用MFI确定波浪理论第一浪,anzo capital实操演示
  • vscode推送gitee方法
  • R语言与作物模型(以DSSAT模型为例)融合应用
  • MFC Windows 程序设计[336]之历史记录编辑框(附源码)
  • 基于单片机的IC卡门禁系统设计
  • 大模型 | NEFTune之引入随机噪声对大模型训练的收益
  • 【开源】基于SpringBoot的高校学院网站的设计和实现
  • 什么是云原生?土生土长?
  • 2011-2021年北大数字普惠金融指数数据(包括省市县)第四期
  • ch3_6多线程举例
  • javaEE -7(网络原理初识 --- 7000字)
  • 新生儿弱视:原因、科普和注意事项
  • 【机器学习可解释性】2.特征重要性排列
  • 机器学习之朴素贝叶斯
  • Python中if __name__ == ‘__main__‘,__init__和self 的解析
  • 【Superset】自定义授权认证,接入内部系统二次开发
  • 私有云:【1】ESXI的安装
  • Mac怎么删除文件和软件?苹果电脑删除第三方软件方法
  • 【开题报告】基于微信小程序的旅游攻略分享平台的设计与实现
  • 布隆过滤器(Bloom Filter)初学习
  • “深入探讨操作系统和虚拟化技术“
  • 远程连接异地主机可能遇到的问题及处理