三天的努力,只弄懂了一个多位数相加
2014-02-21 22:11
337 查看
3116 高精度练习之加法
维基上的题目加法要考虑的不是很多,但有很多细节需要注意,比如
1.输入时用char数组,让后转换成int数组
2.注意下标
总之每个人的思路不同,错的地方也不同,我想说的是我这么简单的代码自己敲,改错,借鉴别人的,再重新敲,再改.整整弄了3天,除了上课什么别的事情也没干,就光光弄着么一小段代码.
在此给自己小小的鼓励.
#include <iostream> #include <string.h> using namespace std; int pluses(int *a, int *b, int sizeA, int sizeB); void print(int size); int result[500]; int main() { for(int i=0; i<500; i++) { result[i] = 0; } char a[500], b[500]; int A[500], B[500]; memset(a, 0, sizeof(a)); memset(b, 0, sizeof(a)); cin >> a >> b; int sizeA = strlen(a), sizeB = strlen(b); int weiA=0, weiB=0; for(weiA=0; weiA<sizeA; weiA++) { A[weiA] = a[weiA] - '0'; } for(weiB=0; weiB<sizeB; weiB++) { B[weiB] = b[weiB] - '0'; } //calculate int wei = pluses(A, B, sizeA, sizeB); print(wei); return 0; } int pluses(int *a, int *b, int sizeA, int sizeB) { int wei=0;//结果的位数,从0开始 表示个位 while(sizeA>0 || sizeB>0) { result[wei++] += a[--sizeA] + b[--sizeB]; while(result[wei-1]>9)//进位 { result[wei-1] -= 10; result[wei] += 1; } while((sizeA*sizeB == 0) && ((sizeA+sizeB) != 0)) { while(sizeA == 0 && sizeB != 0) { result[wei++] += b[--sizeB]; while(result[wei-1]>9)//进位 { result[wei-1] -= 10; result[wei] += 1; } } while(sizeB == 0 && sizeA != 0) { result[wei++] += a[--sizeA]; while(result[wei-1]>9)//进位 { result[wei-1] -= 10; result[wei] += 1; } } } } return wei; } void print(int size) { int i = size; if(result[size] != 0) { cout << result[size]; } while(i>0) { cout << result[--i]; } }
相关文章推荐
- 动易2006序列号破解算法公布
- C#数据结构与算法揭秘二
- 浅析STL中的常用算法
- JavaScript 组件之旅(二)编码实现和算法
- java数据结构和算法学习之汉诺塔示例
- python基础教程之python消息摘要算法使用示例
- php的hash算法介绍
- 将15位身份证补全为18位身份证的算法示例详解
- C++算法系列之日历生成的算法代码
- 你不能错过的 9 款好玩有用的微信小程序
- 1 2 3 4 5 6 7 8 9 = 110的java实现
- Sedgewick之巨著《算法》,与高德纳TAOCP一脉相承
- 【代码】Pythonの代码片段
- STL中算法
- 数据结构&算法学习
- 算法的时间复杂度
- 算法导论:选择排序的原理与实现
- PHP实现四种常用的排序算法
- 图解插入排序算法
- 一些常见算法的JavaScript实现