C++ 大整数宝宝加加乐(九度OJ 1198)
来源:互联网 发布:js判断第一次进入页面 编辑:程序博客网 时间:2024/05/01 17:54
题目描述: 实现一个加法器,使其能够输出a+b的值。
- 输入:
输入包括两个数a和b,其中a和b的位数不超过1000位。
- 输出:
可能有多组测试数据,对于每组数据,
输出a+b的值。
- 样例输入:
2 610000000000000000000 10000000000000000000000000000000
- 样例输出:
810000000000010000000000000000000
源代码:
#include <iostream>#include <string.h>#include <cstdio>using namespace std;void reverse(char *s) //字符串逆置{ int i=0,j=strlen(s)-1; char t; while(i<j) { t=*(s+i); *(s+i)=*(s+j); *(s+j)=t; i++,j--; }}void add(char *num1,char *num2,char *result) //大整数相加{ int i,t; int acc=0; //进位标记 int length1=strlen(num1); //获取两个大整数的长度 int length2=strlen(num2); reverse(num1); //先将两个大整数逆置,从个位数开始一位一位相加,并考虑进位 reverse(num2); for(i=0;i<length1 && i<length2;i++) //两个大整数的每一位都有数字存在 { t=num1[i]-'0'+num2[i]-'0'+acc; result[i]=t%10+'0'; if(t>=10) acc=1; else acc=0; } if(i<length1) //两个大整数位数不同,此时第一个数位数多 { for( ;i<length1;i++) { t=num1[i]-'0'+acc; result[i]=t%10+'0'; if(t>=10) acc=1; else acc=0; } } if(i<length2) //两个大整数位数不同,此时第二个数位数多 { for( ;i<length2;i++) { t=num2[i]-'0'+acc; result[i]=t%10+'0'; if(t>=10) acc=1; else acc=0; } } if(acc==1) //如果两数之和存在进位,需在存结果的字符数组result中补'1' result[i++]='1'; reverse(result);}void output(char *s) //输出最终结果{ printf("%s\n",s);}int main(){ char num1[1000],num2[1000]; char result[100000]; while(scanf("%s %s",num1,num2)!=EOF) //多组输入两个大整数 { for(int i=0;i<100000;i++) //每次相加前将存结果的字符数组result已存入的字符“清空" result[i]=0; add(num1,num2,result); output(result); } return 0;}
程序截图:
PS:
- 这里输入的a.b两只宝宝并不仅仅局限于平时习惯的a.b不超出精度范围的情况,因此需全面考虑,从位数出发,将a.b宝宝存入最大长度为1000的字符数组,然后用result字符数组存结果,并且对两只宝宝先逆置再将最终结果逆置可以从宝宝们的个位开始一位一位相加,并考虑进位,更形象直观。
- 受某萌宝宝的启发,尝试研究了此问题,收获甚多~ 以上代码中大整数相加过程参考了CSDN上的解法,并加上了自己的理解与分析过程完成,yeah
0 0
- C++ 大整数宝宝加加乐(九度OJ 1198)
- 进制转换 (九度oj--大整数除法)
- N的阶乘 -- (九度OJ 大整数乘法)
- 九度OJ--大整数排序
- 九度OJ-1190:大整数排序
- 【九度OJ】1190:大整数排序
- 九度OJ 题目1125:大整数的因子
- 九度OJ 1076 N的阶乘 (大整数运算)
- 【九度OJ】题目1190:大整数排序 解题报告
- 题目1190:大整数排序 九度OJ
- 九度OJ-1198 高精度整数计算
- 九度OJ 1037:Powerful Calculator(强大的计算器) (大整数运算)
- 九度OJ 1125:大整数的因子 (大数运算)
- 九度OJ 1190:大整数排序 (大数运算、排序)
- 九度OJ 1138 进制转换(求大整数的2进制)
- 九度OJ-1198:a+b (高精度整数加法)
- 九度OJ-1198-a+b--高精度整数
- 九度OJ 1063 整数和 (模拟)
- Failure starting system services (java.lang.RuntimeException: There must be one required installer)
- 【Retrofit】Retrofit详解(二)(Retrofit核心流程)
- java的System.exit(0)和System.exit(1)区别。
- 创建博客-完善关注功能(1)
- noip复赛准备
- C++ 大整数宝宝加加乐(九度OJ 1198)
- 重置HCA卡的端口
- Codeforces 115 B Lawnmower【思维】
- 1003. Emergency (25)
- mysql数据库命令大全
- Hibernate的相关知识
- http协议状态码
- 绘制2D学习一
- Mysql 使用命令及 sql 语句示例