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

C语言两个较大数字相加

C语言两个较大数字相加

思路分析

由于C语言中的基本数据类型(如int、long等)有固定的大小,无法直接处理非常大的数字(如数百位的数字)。因此,我们需要采用字符串或数组来表示大数字,并逐位进行加法操作。具体思路如下:

  1. 输入处理:将两个大数字以字符串的形式输入,并将其反转,以方便从低位到高位进行逐位相加。
  2. 逐位相加:从低位到高位逐位相加,同时处理进位问题。如果两个数字长度不同,则在短数字的高位补0。
  3. 处理进位:如果最高位有进位,则在结果的最高位补1。
  4. 结果处理:将结果字符串反转,得到最终的大数字和结果。

示例代码

#include <stdio.h>
#include <string.h>
#include <stdlib.h>// 反转字符串函数
void reverse(char *str) {int len = strlen(str);for (int i = 0; i < len / 2; i++) {char temp = str[i];str[i] = str[len - i - 1];str[len - i - 1] = temp;}
}// 大数相加函数
char* addLargeNumbers(const char *num1, const char *num2) {int len1 = strlen(num1);int len2 = strlen(num2);int maxLen = len1 > len2 ? len1 : len2;// 分配结果字符串,长度最多为 maxLen + 1(可能会有进位)char *result = (char *)malloc(maxLen + 2);memset(result, 0, maxLen + 2);// 反转输入字符串char n1[maxLen + 1], n2[maxLen + 1];strcpy(n1, num1);strcpy(n2, num2);reverse(n1);reverse(n2);// 补齐较短的数字for (int i = len1; i < maxLen; i++) n1[i] = '0';for (int i = len2; i < maxLen; i++) n2[i] = '0';int carry = 0;for (int i = 0; i < maxLen; i++) {int digit1 = n1[i] - '0';int digit2 = n2[i] - '0';int sum = digit1 + digit2 + carry;result[i] = (sum % 10) + '0';carry = sum / 10;}if (carry) result[maxLen] = carry + '0';// 反转结果字符串reverse(result);return result;
}int main() {char num1[1000], num2[1000];printf("输入第一个大数: ");scanf("%s", num1);printf("输入第二个大数: ");scanf("%s", num2);char *sum = addLargeNumbers(num1, num2);printf("两个大数的和: %s\n", sum);free(sum);return 0;
}
http://www.lryc.cn/news/390428.html

相关文章:

  • 大数据面试题之Flume
  • js文件的执行和变量初始化缓存
  • 无法定位程序输入点Z9 qt assertPKcS0i于动态链接库F:\code\projects\06_algorithm\main.exe
  • GoLand 2024 for Mac GO语言集成开发工具环境
  • Protocol Buffer 基础(c++)
  • 上位机网络通讯
  • 转让5000万无区域能源公司要求和流程
  • WordPress Quiz Maker插件 SQL注入漏洞复现(CVE-2024-6028)
  • Swift中的二分查找:全面指南
  • BUG TypeError: GPT2Model.forward() got an unexpected keyword argument ‘past’
  • 解析Kotlin中的Lambda【笔记摘要】
  • rust单元测试顺序执行
  • 力扣-744. 寻找比目标字母大的最小字母
  • 一篇文章搞懂弹性云服务器和轻量云服务器的区别
  • 横穿自动驾驶
  • 为什么网上商店需要翻译成其他语言
  • 【高考志愿】交通运输工程
  • 【深度学习】【Lora训练3】StabelDiffusion,Lora训练过程,秋叶包,Linux,SDXL Lora训练
  • ubuntu系统下如何安装python
  • 邦芒攻略:职场中学会这五种管好情绪的方法
  • Linux各种命令——tac命令,more 命令, less命令,head命令,tail命令,file 命令, stat 命令
  • 【Rust入门教程】hello world程序
  • 激活函数、向前传播、损失函数、梯度下降
  • three.js - MeshStandardMaterial(标准网格材质)- 金属贴图、粗糙贴图
  • 算法-位图与底层运算逻辑
  • 黑马点评-Redis的缓存击穿,缓存雪崩,缓存穿透,互斥锁,逻辑过期
  • 8624 多项式系数累加和
  • 使用 C# 和 OpenXML 读取大型 Excel 文件
  • 【基于R语言群体遗传学】-5-扩展到两个以上等位基因及多基因位点
  • 重采样(上采样或下采样)是什么?