2017.7.14. 高精度四则运算
来源:互联网 发布:json 20160212.jar 编辑:程序博客网 时间:2024/06/06 01:58
高精度加法
适用题型:涉及到加数 > long long的加法运算
std.cpp
#include<iostream>#include<cstdio>#include<algorithm>#include<cmath>#include<cstdlib>#include<string>#include<cstring>#include<ctime>using namespace std;int a[205],b[205],c[205],n,m;int i,j,k,x;char s[205];int main(){ //freopen("jiafa.in","r",stdin); //freopen("jiafa.out","w",stdout); memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); memset(c,0,sizeof(c)); scanf("%s",s); n=strlen(s); for(i=0;i<n;i++) a[n-i]=s[i]-'0'; scanf("%s",s); m=strlen(s); for(i=0;i<m;i++) b[n-i]=s[i]-'0'; if(n<m) n=m; x=0; for(i=1;i<=n;i++) { x=a[i]+b[i]+x; c[i]=x%10; x=x/10; } if(x>0) { n++; c[n]=x;//...不能打成 c[n++]=x...... } for(i=n;i>=1;i--) printf("%d",c[i]); return 0;}
高精度减法
适用题型:涉及到被减数,减数 > long long的减法运算
std.cpp
#include<iostream>#include<cstdio>#include<algorithm>#include<cmath>#include<cstdlib>#include<string>#include<cstring>#include<ctime>using namespace std;int a[300],b[300],c[300],m,n;char s[300],t[300];int i,j,k,x,y;int main(){ //freopen("jianfa.in","r",stdin); //freopen("jianfa.out","w",stdout); memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); memset(c,0,sizeof(c)); scanf("%s",s); m=strlen(s); for(i=0;i<m;i++) a[m-i]=s[i]-'0'; scanf("%s",t); n=strlen(t); for(i=0;i<n;i++) b[n-i]=t[i]-'0'; if(m<n||n==m&&strcmp(s,t)<0) { printf("-"); for(i=1;i<=n;i++) swap(a[i],b[i]); swap(m,n); } for(i=1;i<=m;i++) { x=a[i]-b[i]+10; c[i]=x%10; a[i+1]=a[i+1]-1+x/10; } while(m>1&&c[m]==0) m--; for(i=m;i>=1;i--) printf("%d",c[i]); return 0;}
高精度乘法
适用题型:涉及到乘数 > long long的乘法运算
std.cpp
#include<iostream>#include<cstdio>#include<iomanip>#include<cstdlib>#include<algorithm>#include<cmath>#include<cstring>#include<string>using namespace std;int a[300],b[300],c[600],n,m,k,x;char s[300];int main(){ memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); memset(c,0,sizeof(c)); scanf("%s",s); n = strlen(s); for(int i=0;i<n;i++) a[n-i]=s[i]-'0'; scanf("%s",s); m = strlen(s); for(int i=0;i<m;i++) b[m-i]=s[i]-'0'; for(int i=1;i<=n;i++) { x=0; for(int j=1;j<=m;j++) { x+=a[i]*b[j]+c[i+j-1]; c[i+j-1]=x%10; x/=10; } c[i+m]+=x; } int len = n+m; while(len>1&&c[len]==0) len--; for(int i=len;i>0;i--) cout << c[i]; return 0;}
高精度除法(高÷int)
适用题型:涉及到被除数 > long long,除数 < int的除法运算
std.cpp
#include<iostream>#include<cstdio>#include<string>#include<cstring>#include<cmath>#include<ctime>#include<cstdlib>#include<algorithm>using namespace std;int main(){ //freopen("in.txt","r",stdin); //freopen("out.txt","w",stdout); int a[300],b[300],i,j,n,m,x; char s[300]; memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); cin>>s; n=strlen(s); for(i=0;i<n;i++) a[i]=s[i]-'0'; cin>>m; x=0; for (i=0;i<n;i++) { b[i]=(x*10+a[i])/m; x=(x*10+a[i]) % m; } j=1; while ((b[j]==0) && (j<n-1)) j++; for (i=j;i<n;i++) cout<<b[i]; printf("\n"); printf("%d\n",x); return 0;}
高精度除法(高÷高)
适用题型:涉及到被除数,除数 > long long 的除法运算
std.cpp
#include<iostream>#include<ctime>#include<algorithm>#include<cstring>#include<string>#include<cstdio>#include<cmath>#include<cstdlib>#include<iomanip>using namespace std;int a[210],b[210],c[210],t[210],d;inline void cpy(int p[],int q[],int det){ for(int i=1;i<=p[0];++i) q[i+det-1]=p[i]; q[0]=p[0]+det-1;}inline int cmp(int a[],int b[]){ if(a[0]>b[0]) return 1; if(a[0]<b[0]) return -1; for(int i=a[0];i>0;--i) { if(a[i]>b[i]) return 1; if(a[i]<b[i]) return -1; } return 0;}inline void jian(int a[],int b[]){ int fl=cmp(a,b); if(fl==0) { a[0]=0; return; } if(fl==1) { for(int i=1;i<=a[0];++i) { if(a[i]<b[i]) --a[i+1],a[i]+=10; a[i]-=b[i]; } while(a[0]>0&&a[a[0]]==0) --a[0]; return; }}int main(){ string s; cin>>s; a[0]=s.length(); for(int i=1;i<=a[0];++i) a[i]=s[a[0]-i]-'0'; cin>>s; b[0]=s.length(); for(int i=1;i<=b[0];++i) b[i]=s[b[0]-i]-'0'; c[0]=a[0]-b[0]+1; for(int i=c[0];i>0;--i) { memset(t,0,sizeof(t)); cpy(b,t,i); while(cmp(a,t)>=0) ++c[i],jian(a,t); } while(c[0]>0&&c[c[0]]==0) --c[0]; if(c[0]==0) printf("0"); for(int i=c[0];i>0;--i) printf("%d",c[i]); printf("\n"); if(a[0]==0) printf("0"); for(int i=a[0];i>0;--i) printf("%d",a[i]); return 0;}
阅读全文
0 0
- 2017.7.14. 高精度四则运算
- 高精度四则运算
- 大数的高精度四则运算
- 高精度四则运算---加减
- 高精度四则运算 完整版
- 高精度整数的四则运算
- 高精度四则运算模板
- 高精度四则运算模板
- 大数四则运算(高精度)
- 高精度四则运算模板
- 高精度四则运算模板
- 【高精度】【高精度四则运算模板】高精度除法
- 任意长度大数 高精度四则运算
- 高精度数的四则运算+N!
- 大数加法 减法 乘法 除法 高精度四则运算
- 大数加法 减法 乘法 除法 高精度四则运算
- 2013-BIT程序设计 7. 四则运算之加减法 -- 高精度加减
- 高精度(大数)的四则运算与逻辑运算---c++ struct版
- JavaScript使用正则表达式判断回文字符串
- 4.8订阅事件
- 响应式WEB页面布局插件——XMlayout.js
- express入门(5)- post
- LINUX INPUT设备驱动架构详解
- 2017.7.14. 高精度四则运算
- Android内存泄漏终极解决篇(上)
- 链表求和
- 如何“修改”底层框架源码中的某些功能
- 4.9扩展输出窗口
- 工作常用软件
- Java 集合系列01之 总体框架
- 精华【分布式、微服务、云架构、dubbo+zookeeper+springmvc+mybatis+shiro+redis】分布式大型互联网企业架构!
- 1012. 数字分类 (20)