C++之大数加法
加法加法。一看到加法就觉得简单,其实不然。因为存储长度的限制,有时候计算1234567891011121345+53616456641321345466613这种加法的时候就会出现很多意料之外的问题。随便的丢出两个int相加,甚至long int相加根本得不到结果。于是,需要借助其他的方式了。
我们平时自己处理这么大数的加法时都会用竖式,而且是逐个相加,满10进1。以此为基点,我们可以联想到运用string类来处理这些数,将他们的每一位都存储在string中,那么长度为1000的数组就能存储1000位的数字,这样不就可以解决了。
// // main.cpp // yy // // Created by MadMarical on 15/11/25. // Copyright (c) 2015年 com. All rights reserved. // #include <iostream> #include <string> #include <vector> #include <algorithm> #include <stdexcept> using namespace std; #define MAXN 1000 int a[MAXN],b[MAXN]; int main(int argc, const char * argv[]) { string str1,str2;//保存输入 long int len1,len2; long int i,j,k; int up; /*输入流程*/ cin>>str1>>str2; /*初始化各量*/ len1 = str1.length(); len2 = str2.length(); memset(a, 0, sizeof(a)); memset(b, 0, sizeof(b)); /*注意,必须倒着保存数据*/ for (i = len1 - 1, k = 0; i != -1; -- i) { a[k] = str1[i] - '0'; k++; } for (j = len2 - 1, k = 0; j != -1; -- j) { b[k] = str2[j] - '0'; k++; } for (i = 0, up = 0; i < MAXN; ++ i) { a[i] = a[i] + b[i] + up; up = a[i] / 10; a[i] %= 10; } for (i = MAXN - 1; i != -1; -- i) { if (a[i]) { break; } } for (k = i; k != -1; --k) { cout<<a[k]; } return 0; }
反思:
1.细心还是细心,不细心连几个初始化变量为啥子要初始化成这样都搞不明白。
2.算法的重要度可见一斑,稍微改一下思路,代码量就陡增而且问题随之而来。有时候,简单一点的想法未尝不可以尝试。
3.牢记各模块的知识。
- 上一篇 »javascript的大数表示
- 下一篇 »PHP之路——数学,大数函数库