大数相加

概述:本题主要解决HDU 1002的大数相加问题并且成功AC

主要思路

1:定义两个字符数组和两个int型数组,输入字符串数组
2:将两个字符数组的长度用’0’补到一样长
3:倒着存入int型数组(方便计算~),
如:原来在字符数组里:123 56
存入后:3210 6500(这里多一个0的原因是两个数相加可能溢出一位)
4:从前往后逐位运算(模拟手算过程), 最后倒着输出(因为是倒着输入的)

代码实现

#include<iostream>
#include<string>
#include<algorithm>
#include<string.h>using namespace std ;int main ()
{char a[1000] , b[1000] ;int a_int[1001] , b_int[1001] ;//int型最大位数要多一位,防止运算时溢出int t , a_len , b_len , max_len ;//定义数组长度cin >> t ;for ( int i = 1 ; i  <= t ; i ++ ) {cin >> a >> b ; //cin可以直接输入char数组。a_len = strlen(a) ;b_len = strlen(b) ;int tmp = 0 ; //存入整型数组for ( int j = a_len - 1 ; j >=0 ; j -- )//反向存入a_int[]a_int[tmp++] = a[j] - '0' ;  tmp = 0 ;for ( int k = b_len-1 ; k >= 0 ; k -- )//反向存入b_int[]b_int[tmp++] = b[k] - '0' ; //判断a_int[]和b_int[]哪个大,小的填充0if ( a_len > b_len ){for ( int j = b_len ; j <= a_len ; j ++ ) {b_int[j] = 0 ;}a_int[a_len] = 0 ;//第n+1位置0 } else if ( a_len < b_len) {for ( int j = a_len ; j <= b_len ; j ++ ) {a_int[j] = 0 ;}b_int[b_len] = 0 ;} else {//如果一样大,则都在前面添一个0,防止运算时溢出a_int[a_len] = 0 ;b_int[b_len] = 0 ;}max_len = max( a_len , b_len ) ;//求和for ( int j = 0 ; j <= max_len ; j ++ ) {a_int[j] += b_int[j] ;if ( a_int[j] >= 10 ){a_int[j] -= 10 ;a_int[j+1] += 1 ;}} //以下是按照ACM方式输出的,读者可以作适当更改,cout << "Case " << i << ':' << endl ;cout << a << " + " << b << " = " ;//判断最高位是否有进位,有就输出if ( a_int[max_len] == 0 )//因为倒序存放,所以倒序输出for ( int j = max_len-1;j>=0;j--) cout << a_int[j] ;else{for ( int j=max_len;j>=0;j--)cout << a_int[j] ;} if ( i != t )cout << endl << endl ;else cout << endl ; } return 0 ;}

结果是按照ACM题的方式输出的 , 读者可参考杭电 HDU1002尝试AC,(小声哔哔:能通过ACM的代码才是好代码~~,笔者之前尝试了N个小时数种方法,只有这个代码能AC。)

千里之行始于足下,望耐心理解,期望大家都有所收获

大数系列之大数相加(ACM通过)(一)相关推荐

  1. c语言大数阶乘详细,大数阶乘(c语言)

    大数阶乘.代码比较简单. #include #include #define MAXN 25000 // 如果你的阶乘N比较大,建议大一点 int result[MAXN]; int main() { ...

  2. 大数算法之大数加减法

    大数算法之大数加减法 当我们第一次编程,成功地在黑洞洞的控制台窗口中打印出"Hello World"的字符后,准备编写的第一个有实用性的程序是什么?我想,对于大多数人而言,这一问题 ...

  3. 大数的基本运算——大数乘法

    大数:即超过了计算机定义类型的范围的数,如126349678984*1321656546446546546546,这种运算的结果 太大,超过了基本类型的范围,发生溢出,这样我们就需要运用大数的算法来解 ...

  4. 大数相乘、大数相加、大数相减Java版本

    为什么80%的码农都做不了架构师?>>>    题目:两个非常大的数字相乘(相加,相减) 该题目在java中可以使用BigInteger类中的方法来实现.否则的话可以使用如下方式来实 ...

  5. 大数系列三——斐波那契数列——高效万进制,亿进制

    浅谈万进制思想: 日常生活中我们习惯用十进制去运算: 为了方便电脑识别开发出了二进制,又因为2^3=8 , 2^4=16,因此应运而生了八进制与16进制. 世上本没有路,走的人多了,也便成了路,那么既 ...

  6. 大数系列——大数加法

    这几天专门学习了一下大数的有关计算方法,大数加减乘除模都会在后面讲到. 一.大数加法: 加法算是最简单的一类大数问题,先写上我的代码: <span style="font-size:1 ...

  7. 两个大数(整数)相加模板

    #include<stdio.h> #include<string.h> char str[1005],ch[1005]; int sum[1005],L; void fun( ...

  8. 大数运算(2)——大数加法

    /*大数加法的中心思想就是:模拟人工列竖式算加法的方法.先从最低位开始相加,判断是否进1,一直到最高位. 例如: 求12545642233+278545的和,该怎么算? 是这样的:      3  3 ...

  9. java大数模板_java大数模板

    这几天做了几道用大数的题,发现java来做大数运算十分方便.对acmer来说是十分实用的 1.valueOf(parament); 将参数转换为制定的类型 比如 int a=3; BigInteger ...

最新文章

  1. DATEIF实例说明4
  2. 求e的近似值java_7-78 求e的近似值 (15 分)
  3. 一个python程序员需要掌握的知识-Python程序员鲜为人知但你应该知道的17个问题...
  4. HDU - 1890 Robotic Sort(Splay-区间翻转+删除根节点)
  5. 计算机应用基础在线测试01,计算机应用基础在线测试(全部正确).pdf
  6. “格式工厂”音频剪辑快速入门
  7. [转]Android中pendingIntent的深入理解
  8. apt get 安装mysql5.7_ubuntu16.04下apt-get安装mysql5.7,文件目录结构
  9. 谈谈研发PLM项目管理
  10. SPSS26版本软件超详细安装指导+内附安装资源
  11. android 下载目录,android – FileProvider – 从下载目录中打开文件
  12. windows10 8081端口被占用如何解决
  13. VM虚拟机占内存非常大
  14. 唐太宗李世民14个儿子的可悲结局[高清组图]
  15. 流量都去哪儿了? 流量不清零后“消耗快”
  16. RepMet: Representative-based metric learning for classification and few-shot object detection
  17. 运行项目报错 proxy error: could not proxy request...
  18. 2011 各大IT公司笔试面试题目
  19. 一篇文章看清楚 Linux 的职业发展方向
  20. 基于Mxnet的车辆重识别(Re-ID)之数据集处理(以VeRi为例)

热门文章

  1. 当我们在谈论内存时,我们在谈论什么
  2. 干货 | SpringBoot注解大全,值得收藏
  3. 基于CDN边缘网络智能优化图片和视频
  4. LiveVideoStackCon 2021上海站 售票通道关闭倒计时24h
  5. 争做RTC领域标杆——与华为云副总裁薛浩聊聊我们的视频时代
  6. 基于主观感兴趣区域的视频编码实践
  7. 微软 VSCode IDE 源码分析揭秘
  8. 浅析低延迟直播协议设计:RTP/RTCP
  9. nginx启动期做了哪些事
  10. 揭秘华尔街人工智能真实水平:距离40%的金融民工被取代或只剩8年