大整数加减乘法
2016-10-25 19:30
204 查看
#include<cstdio> #include<string> #include<cstring> #include<iostream> #include<algorithm> #define N 1000 using namespace std; struct node{ int num ,len; }a,b; string st1,st2; void init(){ getline(cin,st1); getline(cin,st2); int l1=a.len=st1.size(),l2=b.len=st2.size(); memset(a.num,0,sizeof a.num); memset(b.num,0,sizeof b.num); for (int i=0;i<l1;i++) a.num[l1-i]=st1[i]-'0'; for (int i=0;i<l2;i++) b.num[l2-i]=st2[i]-'0'; } node add(node a,node b){ node c; memset(c.num,0,sizeof c.num); int len=max(a.len,b.len); for (int i=1;i<=len;i++) { int tmp=c.num[i]+a.num[i]+b.num[i]; c.num[i]=tmp%10; c.num[i+1]=tmp/10; } if (c.num[len+1]) len++; while (!c.num[len] && len>1) len--;//注意和为0的情况 c.len=len; return c; } node bigminus(node a,node b){ node c; memset(c.num,0,sizeof c.num); int len=a.len; for (int i=1;i<=len;i++) { if (a.num[i]<b.num[i]) { a.num[i]+=10; int k=i+1; a.num[k]--; while(a.num[k]<0) { a.num[k]+=10; a.num[++k]--; } } //对于进位的处理要细致一点! c.num[i]=a.num[i]-b.num[i]; } while (!c.num[len] && len>1) len--;//注意和为0的情况 c.len=len; return c; } node mult(node a,node b){ node c; memset(c.num,0,sizeof c.num); c.len=a.len+b.len; for(int i=1;i<=a.len;i++) for(int j=1;j<=b.len;j++) c.num[i+j-1]+=a.num[i]*b.num[j]; for(int i=1;i<=c.len;i++) c.num[i+1]+=c.num[i]/10,c.num[i]%=10; while (!c.num[c.len] && c.len >1) c.len--; return c; } void print(node t){ for (int i=t.len;i>0;i--) printf("%d",t.num[i]); } int main(){ init(); node ans=add(a,b); print(ans); return 0; }
相关文章推荐
- 大整数的加减乘法,没有除法,你想累死我啊?
- 一道面试题(C#实现了超大整数的加减乘法运算)
- 【CodeVS 3123】 高精度练习之超大整数乘法
- 从键盘输入一个整数(1-9),打印出对应的乘法表(Java)
- POJ 1001 解题报告 高精度大整数乘法模版
- Code[VS] 3123 高精度练习之超大整数乘法
- OpenJudge 2980 大整数乘法
- N!(大整数乘法)
- 算法笔记_034:大整数乘法(Java)
- 编写一个程序,实现两个256位的十进制整数的乘法运算.
- 高精度计算-大整数乘法
- 大整数操作(加、减和未完成的乘法)
- 3123 高精度练习之超大整数乘法 - Wikioi
- 借助 数组 实现一个关于大整数乘法的 c 程序
- 分治算法——大整数乘法(multiplication of large integers)
- 3.2 例子:三个整数加减
- 大整数的乘法
- 大整数乘法
- Java中大整数乘法
- 大整数与大整数乘法