大数相加不能直接使用基本的int类型,因为int可以表示的整数有限,不能满足大数的要求。可以使用字符串来表示大数,模拟大数相加的过程。
思路:1.反转两个字符串,便于从低位到高位相加和最高位的进位导致和的位数增加;
2.对齐两个字符串,即短字符串的高位用‘0’补齐,便于后面的相加;
3.把两个正整数相加,一位一位的加并加上进位。
具体代码如下:
- /**
- * 两个大数相加,且这两个大数是正整数
- * 暂时不考虑负数,不考虑输入不合法的情况
- * 要保证输入是正确的才能保证程序正常运行
- */
-
- #include <stdio.h>
- #include <string.h>
-
- #define MAXSIZE 1000
-
- int main()
- {
- char number1[MAXSIZE+1];
- char number2[MAXSIZE+1];
- char sum[MAXSIZE+2];
- char temp1[MAXSIZE+1];
- char temp2[MAXSIZE+1];
- int len1 = 0;
- int len2 = 0;
- int i = 0;
- int j = 0;
- int maxLen = 0;
- int nSum = 0;
- int nCarryBit = 0;
- int nOverFlow = 0;
-
- gets(number1);
- gets(number2);
-
- //1.反转字符串,便于从低位到高位相加和最高位的进位导致和的位数增加
- len1 = strlen(number1);
- len2 = strlen(number2);
-
- j = 0;
- for(i = len1-1; i >= 0; --i)
- {
- temp1[j++] = number1[i];
- }
- temp1[j] = '\0';
- j = 0;
- for(i = len2-1; i >= 0; --i)
- {
- temp2[j++] = number2[i];
- }
-
- //2.把两个字符串补齐,即短字符串的高位用‘0’补齐
- maxLen = (len1 > len2)?len1:len2;
- if(len1 < len2)
- {
- for(i = len1; i < len2; ++i)
- temp1[i] = '0';
- temp1[len2] = '\0';
- }
- else if(len1 > len2)
- {
- for(i = len2; i < len1; ++i)
- temp2[i] = '0';
- temp2[len1] = '\0';
- }
-
- //3.把两个正整数相加,一位一位的加并加上进位
- for(i = 0; i < maxLen; i++)
- {
- nSum = temp1[i] - '0' + temp2[i] - '0' + nCarryBit;
-
- if(nSum > 9)
- {
- if(i == (maxLen-1))
- {
- nOverFlow = 1;
- }
-
- nCarryBit = 1;
-
- sum[i] = nSum - 10 + '0';
- }
- else
- {
- nCarryBit = 0;
- sum[i] = nSum + '0';
- }
-
- }
-
- //如果溢出的话表示位增加了
- if(nOverFlow == 1)
- {
- sum[maxLen++] = nCarryBit + '0';
- }
- sum[maxLen] = '\0';
-
- //从后向前输出,即是相加后的值
- for(i = maxLen-1; i >=0; --i)
- putchar(sum[i]);
-
- printf("\n");
-
- return 0;
- }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)