高精度模板汇总
来源:互联网 发布:华伦夫妇知乎 编辑:程序博客网 时间:2024/06/10 17:25
前言
话说我真的只能颓一颓[普及-]难度的内容了……药丸。
而且以前还在被一本通毒害时期连高精度取模和高精除高精都不会……我是废柴啊……
因为考完月考后干劲为0,只想看全职,不想码程序,所以还是先从高精度下刀来恢复手感吧。(像abs和Angelina那样的大神都是从平衡树和数学开始的)
另外大jay形打赌说他月考不是班上最后一名就在机房倒立唱千本樱……等着看好戏(咳咳跑题了)
高精度加法
洛谷P1610
模拟竖式加法。
#include<iostream>#include<cstdio>#include<iomanip>#include<algorithm>#include<cstring>using namespace std;int a[501],b[501],c[505];char sa[501],sb[501];int main(){ int i,j,na,nb,nc,x; scanf("%s\n",sa); scanf("%s",sb); na=strlen(sa);nb=strlen(sb); for(i=0;i<na;i++)a[na-i]=sa[i]-'0'; for(i=0;i<nb;i++)b[nb-i]=sb[i]-'0'; nc=1; x=0; while(nc<=na||nc<=nb) { c[nc]=a[nc]+b[nc]+x; x=c[nc]/10;c[nc]=c[nc]%10; nc++; } c[nc]=x; while(c[nc]==0&&nc>1)nc--; for(i=nc;i>=1;i--)printf("%d",c[i]); return 0;}
高精度减法
洛谷P2142
模拟竖式减法。
#include<iostream>#include<cstdio>#include<cstring>#include<iomanip>#include<algorithm>using namespace std;char s1[1005],s2[1005],s3[1005];int a[1005],b[1005],c[1005];int main(){ int i,j,la,lb,tmp; scanf("%s",s1);scanf("%s",s2); la=strlen(s1);lb=strlen(s2); if(la<lb||(la==lb&&(strcmp(s1,s2)<0))){ printf("-"); strcpy(s3,s1);strcpy(s1,s2);strcpy(s2,s3); tmp=la;la=lb;lb=tmp; } for(i=0;i<la;i++)a[la-i]=s1[i]-'0'; for(i=0;i<lb;i++)b[lb-i]=s2[i]-'0'; i=1; while(i<=la&&i<=lb){ if(a[i]<b[i]){a[i]+=10;a[i+1]--;} c[i]=a[i]-b[i]; i++; } while(i<=la){ if(a[i]<0){a[i]+=10;a[i+1]--;} c[i]=a[i];i++; } while(!c[i]&&i>1)i--; for(j=i;j>=1;j--)printf("%d",c[j]); return 0;}
高精乘高精
模拟竖式乘法。
洛谷P1303
#include<iostream>#include<cstdio>#include<cstring>#include<iomanip>#include<algorithm>using namespace std;char s1[2005],s2[2005];int a[2005],b[2005],c[4005];int main(){ int i,j,la,lb,lc,x; scanf("%s",s1);scanf("%s",s2); la=strlen(s1);lb=strlen(s2); for(i=0;i<la;i++)a[la-i]=s1[i]-'0'; for(i=0;i<lb;i++)b[lb-i]=s2[i]-'0'; for(i=1;i<=la;i++){ x=0; for(j=1;j<=lb;j++){ c[i+j-1]+=a[i]*b[j]+x; x=c[i+j-1]/10;c[i+j-1]%=10; } c[i+lb]+=x;//i+lb! } lc=la+lb; while(!c[lc]&&lc>1)lc--; for(i=lc;i>=1;i--)printf("%d",c[i]); return 0;}
高精除低精
这是很简单的模拟竖式除法啦啦
#include<iostream>#include<cstdio>#include<cstring>#include<iomanip>#include<algorithm>using namespace std;char s1[5005];int a[5005],c[5005];long long b;int main(){ int i,j,la,lc,x=0; scanf("%s",s1);scanf("%lld",&b); la=strlen(s1); for(i=0;i<la;i++)a[i+1]=s1[i]-'0'; for(i=1;i<=la;i++){ a[i]+=x*10;c[i]=a[i]/b;x=a[i]%b; } lc=1; while(!c[lc]&&lc<la)lc++; for(i=lc;i<=la;i++)printf("%d",c[i]); return 0;}
高精除高精
本来以为很高级,最后发现是简单的模拟减法……
随便啦……还是写一写啦……
模拟减法还是有窍门的,一个一个的减会减到天荒地老,只要十倍百倍千倍……地减就会快很多,具体看代码吧。
#include<iostream>#include<cstdio>#include<cstring>#include<iomanip>#include<algorithm>using namespace std;char s1[5005],s2[5005];int a[10005],b[10005],c[10005],tmp[10005];int com(int a[],int b[]){//比较大小,a<b -1,a>b 1,a=b 0 int i; if(a[0]<b[0])return -1; if(a[0]>b[0])return 1; for(i=a[0];i>=1;i--) if(a[i]<b[i])return -1; else if(a[i]>b[i])return 1; return 0;}void jian(int a[],int b[]){//高精度减法 int flag,i,x; flag=com(a,b); if(flag==0){a[0]=1;a[1]=0;return;} for(i=1;i<=a[0];i++){ x=0; if(a[i]<b[i]){a[i]+=10;a[i+1]--;} a[i]-=b[i]; } while(a[0]>1&&!a[a[0]])a[0]--;}void go(int a[],int b[],int c[]){ int i,j,lc,cnt=0; lc=a[0]-b[0]+1;//因为从第一位开始多了很多多余的计算,所以我们可以豪迈点,直接十倍百倍千倍的减 for(i=lc;i>=1;i--){ memset(tmp,0,sizeof(tmp)); //复制b数组到tmp数组从i开始的地方 for(j=1;j<=b[0];j++) tmp[j+i-1]=b[j]; tmp[0]=b[0]+i-1; while(com(a,tmp)>=0){ c[i]++; jian(a,tmp);cnt++; } } while(lc>1&&!c[lc])lc--; for(i=lc;i>=1;i--)printf("%d",c[i]);}int main(){ int i,j; scanf("%s",s1);scanf("%s",s2); a[0]=strlen(s1);b[0]=strlen(s2); for(i=0;i<a[0];i++)a[a[0]-i]=s1[i]-'0'; for(i=0;i<b[0];i++)b[b[0]-i]=s2[i]-'0'; go(a,b,c); return 0;}
高精度取模
如果是高精除高精就是最后减法过后A数组里剩下的东西。
如果是高精除低精就是除法+乘法+减法。
所以就不写了(还是因为懒)
0 0
- 高精度模板汇总
- 高精度模板
- 高精度模板
- 高精度模板
- 高精度模板
- 高精度模板
- 高精度模板
- 高精度模板
- 高精度模板
- 高精度模板
- 高精度模板
- 高精度模板
- 高精度模板
- 高精度模板
- 高精度模板
- 高精度模板
- 【模板】高精度
- 高精度模板
- JAVA集合相关基础知识
- 五一作业
- 【Unity3D】导入字体与淡入启动场景
- poj 1161 The Suspects
- Eclipse添加tomcat出现 The Apache Tomcat installation at this directory is version 8.5.6. A Tomcat 8.0 in
- 高精度模板汇总
- 苹果加速审核通道
- 经济学原理——微观经济学
- 学习能力与认知
- JavaScript中对象类型的汇总及相关方法的简介
- PyTorch实现DCGAN、pix2pix、DiscoGAN、CycleGAN、BEGAN VAE、Char RNN等
- 面向切面编程
- 震惊!Linux下忘记mysql密码他竟这样做
- 语法——JavaScript知识小结02