高精度运算总结
2017-07-24 13:53
211 查看
高精度运算 以下只包含 输入的数为正整数
参考 oj 洛谷
加:https://www.luogu.org/problem/show?pid=1601
减:https://www.luogu.org/problem/show?pid=2142
乘:https://www.luogu.org/problem/show?pid=1303
除:https://www.luogu.org/problem/show?pid=1480
大数加法
大数 减法
大数 乘法
大数 除法 恶心死我了
参考 oj 洛谷
加:https://www.luogu.org/problem/show?pid=1601
减:https://www.luogu.org/problem/show?pid=2142
乘:https://www.luogu.org/problem/show?pid=1303
除:https://www.luogu.org/problem/show?pid=1480
大数加法
#include<bits/stdc++.h> using namespace std; int main(){ char a[10001],b[10001]; int a1[10001],b1[10001],c[100001]={0}; int j,k,l,i; cin>>a>>b; int len1=strlen(a); int len2=strlen(b); for(j=0;j<len1;j++){ a1[j]=a[j]-'0'; } for(j=0;j<len2;j++){ b1[j]=b[j]-'0'; } len1--; len2--; k=0; while(len1!=-1&&len2!=-1){ l=a1[len1]+b1[len2]+c[k]; if(l>9){ c[k+1]++; l=l-10; } c[k]=l; k++; len1--; len2--; } while(len1!=-1){ c[k]=a1[len1]+c[k]; if(c[k]>9){ c[k]=c[k]-10; c[k+1]++; } k++; len1--; } while(len2!=-1){ c[k]=b1[len2]+c[k]; if(c[k]>9){ c[k]=c[k]-10; c[k+1]++; } k++; len2--; } if(c[k]!=0){ k++; } for(j=k-1;j>=0;j--){ cout<<c[j]; } }
大数 减法
#include<bits/stdc++.h> using namespace std; int main(){ string e,d,a,b; int a1[10001],b1[10001],c[100001]={0}; int j,k,l,i,x=0,y=0; cin>>e>>d; int len1=e.size(); int len2=d.size(); if(len1>len2||(len1==len2&&e>=b)){a=e;b=d;} else { i=len1; len1=len2; len2=i; a=d; b=e; cout<<"-";} for(j=0;j<len1;j++){ a1[j]=a[j]-'0'; } for(j=0;j<len2;j++){ b1[j]=b[j]-'0' 4000 ; } for(i=0;i<len1/2;i++) swap(a1[i],a1[len1-1-i]); for(i=0;i<len2/2;i++) swap(b1[i],b1[len2-1-i]); //前后交换位置 方便计算 for(j=0;j<len1;j++){ c[j]=a1[j]-b1[j]; // cout<<c[j]<<endl; } for(j=0;j<len1;j++){ if(c[j]<0){ c[j]+=10; c[j+1]--; } } for(j=len1-1;j>=0;j--){ if(c[j]>0) break; } for(;j>=0;j--){ x=1; cout<<c[j]; } if(x==0) cout<<"0"; return 0; }
大数 乘法
#include<bits/stdc++.h> using namespace std; int main(){ string e,d,a,b; int a1[10001],b1[10001],c[100001]={0}; int j,k,l,i,x=0,y=0; cin>>a>>b; int len1=a.size(); int len2=b.size(); for(j=0;j<len1;j++){ a1[j]=a[j]-'0'; } for(j=0;j<len2;j++){ b1[j]=b[j]-'0'; } for(i=0;i<len1/2;i++) swap(a1[i],a1[len1-1-i]); for(i=0;i<len2/2;i++) swap(b1[i],b1[len2-1-i]); for(j=0;j<len1;j++){ for(k=0;k<len2;k++){ c[j+k]=c[j+k]+a1[j]*b1[k]; c[k+j+1]+=c[k+j]/10; c[k+j]%=10; //cout<<a[i] } } l=len1+len2; while(l>1&&c[l-1]==0) l--; for(j=l-1;j>=0;j--) cout<<c[j]; return 0; }
大数 除法 恶心死我了
#include<bits/stdc++.h> using namespace std; int main(){ string e,d,a,b; int a1[10001],c[100001]={0}; int j,k,l,x=0,y=0; long long b1,i; cin>>a>>b1; int len1=a.size(); int len2=b.size(); for(j=0;j<len1;j++){ a1[j]=a[j]-'0'; } if(b1==0||a1[0]==0){ cout<<"0"<<endl; return 0; } j=0; i=a1[0]; k=0; while(j<len1){ if(i>=b1){ c[j]=i/b1; i=i%b1; i=i*10+a1[j+1]; } else{ i=i*10+a1[j+1]; c[j]=0; } j++; } for(j=0;j<len1-1;j++) if(c[j]!=0) break; for(;j<len1;j++) cout<<c[j]; return 0; }
相关文章推荐
- 高精度运算总结(10.21更新整数乘法)
- 高精度总结(高精度类和重载运算高精度阶乘)
- java高精度、大数运算总结
- java中进行高精度、大数运算总结BigInteger BigDecimal
- 1001. Exponentiation高精度运算总结
- 使用C++的string实现高精度加法运算
- 位运算总结
- Java高精度运算工具类
- 019:初等函数的连续性总结(四则及复合运算)
- c语言学习之位运算知识总结和实例分析
- 四则运算项目总结
- 高精度运算——实数乘法
- 高精度四则运算模板
- SQL Server调优系列基础篇(并行运算总结)
- matlab符号运算总结(转)
- [AS3]as3中或者(||)与(&&)运算相关的总结
- 高精度运算--进制转换.POJ.1120
- 高精度运算和简单优化方法(C语言)
- 【持续更新】总结经典位运算Tricks
- c/c++系列的运算符优先级总结