高精度模版:加,减,乘,带余除法
来源:互联网 发布:淘宝店如何找货源 编辑:程序博客网 时间:2024/06/04 20:12
#include<cstdio>#include<iostream>#include<algorithm>#include<cstring>#include<vector>using namespace std;const int N=100005;char s[N];struct Wint:vector<int>{ Wint(int n=0) { push_back(n); check(); } void check() { while(!empty()&&!back()) pop_back(); if(empty()) return; for(int i=1;i<size();i++) { (*this)[i]+=(*this)[i-1]/10; (*this)[i-1]%=10; } while(back()>=10) { push_back(back()/10); (*this)[size()-2]%=10; } }};bool operator==(const Wint &A,const Wint &B){ if(A.size()!=B.size()) return 0; for(int i=0;i<A.size();i++) if(A[i]!=B[i]) return 0; return 1;}bool operator<(const Wint &A,const Wint &B){ if(A.size()!=B.size()) return A.size()<B.size(); for(int i=A.size()-1;i>=0;i--) if(A[i]!=B[i]) return A[i]<B[i]; return 0;}bool operator>=(const Wint &A,const Wint &B){ return !(A<B);}Wint operator+(const Wint &A,const Wint &B){ Wint C=A; if(C.size()<B.size()) C.resize(B.size()); for(int i=0;i<B.size();i++) C[i]+=B[i]; C.check(); return C; }Wint operator-(const Wint &A,const Wint &B) //A>B{ Wint C=A; for(int i=0;i<B.size();i++) { if(C[i]<B[i]) { int j=i+1; while(C[j]==0) j++; while(j>i) {C[j]--; C[--j]+=10;} } C[i]-=B[i]; } C.check(); return C;}Wint operator*(const Wint &A,const Wint &B){ Wint C; C.assign(A.size()+B.size(),0); for(int i=0;i<A.size();i++) for(int j=0;j<B.size();j++) C[i+j]+=A[i]*B[j]; C.check(); return C;}Wint operator/(Wint &A,const Wint &B) // %{ Wint ans; int top=A.size()-B.size(); for(int t=top;A>=B&&t>=0;t--) { Wint C; C.assign(t,0); C.push_back(1); Wint D=C*B; while(A>=D) { A=A-D; ans=ans+C; } } ans.check(); return ans;}Wint operator%(Wint &A,const Wint &B) // %{ int top=A.size()-B.size(); for(int t=top;A>=B&&t>=0;t--) { Wint C; C.assign(t,0); C.push_back(1); Wint D=C*B; while(A>=D) A=A-D; } A.check(); return A;}int main(){ Wint A; Wint B; scanf("%s",s); int len=strlen(s); for(int i=len-1;i>=0;i--) A.push_back(s[i]-'0'); scanf("%s",s); len=strlen(s); for(int i=len-1;i>=0;i--) B.push_back(s[i]-'0'); Wint C=A%B; if(C.empty()) C.push_back(0); for(int i=C.size()-1;i>=0;i--) printf("%d",C[i]);}
阅读全文
0 0
- 高精度模版:加,减,乘,带余除法
- [复习]高精度 高精度加/减/乘/除法
- 高精度 加 减 乘
- [模板]高精度加、减、乘
- 高精度加减乘模版
- 模拟大整数加、减、乘、除法
- 大数加,减,乘,取余一起
- [ACM模板] BigInt高精度加/减/除法
- 高精度 加、减、乘、除 模板
- 转载高精度加减乘除法
- 带余除法专题
- 04:带余除法
- 加 减 乘 除 求余 switch用法
- 大数加、减、乘、除和求余运算
- 高精度加,减,乘,除,取模,模板
- C++高精度(加/减/乘/除)【封装】
- 高精度模板---加、减、乘(非负数)
- #define 乘除法可以不加括号?
- Unity3d基础入门之常用API的总结与解析
- js时间格式化,日期加减天
- 重新给mysql设置登陆密码(包括安装中没有设置登陆密码的情况)
- UVA-136 Ugly Numbers (map容器+优先队列)
- L1027
- 高精度模版:加,减,乘,带余除法
- Vue和React的区别
- PHP-身份证号码验证
- play框架初探索
- 知名三方库 RNCachingURLProtocol 之清除缓存方案
- 阿里巴巴Java开发手册学习-OOP规约
- Spark使用Java读取mysql数据和保存数据到mysql
- Service
- 系统集成Jenkins+git+maven方式