每日算法之大数加法
2013-02-23 12:13
211 查看
#include "stdio.h" #include "math.h" #include "string.h" #include <iostream> #include <Windows.h> using namespace std; void reverse(char s[],int len) { int i=0; int swap; while(i<len/2) { swap=s[i]; s[i]=s[len-1-i]; s[len-1-i]=swap; i++; } } void add(int str1[],int len1,int str2[],int len2) { int smaller,bigger,newer; int* swap; newer=len1>len2 ? (len1+1) :(len2+1); swap=(int *)malloc(sizeof(int)*newer); memset(swap, 0, sizeof(int) * newer); smaller=len1>len2 ? len2:len1; for(int i=0;i<smaller;i++) swap[i]=str1[i]+str2[i]; if(len1>len2) for(int i=smaller;i<len1;i++) swap[i]=str1[i]; else for(int i=smaller;i<len1;i++) swap[i]=str2[i]; int pex=0; for(int i=0;i<newer;i++) { swap[i]=swap[i]+pex; pex=swap[i]/10; swap[i]=swap[i]%10; /*int d; d=swap[i]/10; swap[i]=swap[i]%10; swap[i+1]=swap[i]+d; */ } printf("结果:"); if(swap[newer-1]!=0) printf("%d",swap[newer-1]); for(int i=newer-2;i>=0;i--) { printf("%d",swap[i]); } } void main() { char a[1001]; char b[1001]; int aa[1001]; int bb[1001]; int length1,length2; cin.getline(a,1000); length1=strlen(a); reverse(a,length1); cin.getline(b,1000); length2=strlen(b); reverse(b,length2); for (int i=0;i<length1;i++) aa[i]=a[i]-48; for(int i=0;i<length2;i++) bb[i]=b[i]-48; add(aa,length1,bb,length2); system("pause"); }
相关文章推荐
- 大数运算之加法和乘法算法C++模板
- 基础算法,大数加法和乘法的实现
- 算法提高 ADV-136 大数加法
- 每日一算法:大数的阶乘
- 蓝桥杯 ADV-136算法提高 大数加法
- 算法——大数加法
- 蓝桥杯 算法提高 大数加法
- 大数加法算法
- 蓝桥杯——算法提高 大数加法&大数乘法&冒泡排序
- 算法提高 大数加法
- 每日算法--矩阵乘法优化递推
- (hdu step 2.3.1)A + B Problem II(大数加法)
- 每日一省之————加权无向图的最小生成树算法(Prim/Kruskal算法)
- 每日算法——并查集的应用
- 面试算法(四十七)不用加减乘除做加法
- java大数加法
- 51nod1005---大数加法(51nod基础:加减模拟)
- HDU 1002大数加法
- 剑指offer之面试题12 大数相加 实现任意两个整数的加法
- 超长整数运算(大数运算)(算法)