[REVIEW] 高精度模板
来源:互联网 发布:用友软件版本介绍 编辑:程序博客网 时间:2024/05/18 12:41
【高精度加法】
洛谷 P1255 数楼梯
//数楼梯(高精度加法模板) #include<iostream>#include<cstdio>#include<cstring>#define fo(i,j,k) for(i=j;i<=k;i++)using namespace std;int a[100005],b[100005],c[100005];int main(){ int i,j,n; scanf("%d",&n); if(n==0) {printf("0\n");return 0;} if(n==1) {printf("1\n");return 0;} if(n==2) {printf("2\n");return 0;} a[0]=a[1]=b[0]=1,b[1]=2; fo(j,3,n) { memset(c,0,sizeof c); c[0]=max(a[0],b[0]); fo(i,1,b[0]) { c[i]+=a[i]+b[i]; c[i+1]+=c[i]/10; c[i]%=10; } if(c[c[0]+1]) c[0]++; fo(i,0,b[0]) a[i]=b[i]; fo(i,0,c[0]) b[i]=c[i]; } for(i=c[0];i;i--) printf("%d",c[i]); printf("\n"); return 0;}
【n进制高精度】
题目描述
话说有一天,小Z乘坐宇宙飞船,飞到一个美丽的星球。因为历史的原因,科技在这个美丽的星球上并不很发达,星球上人们普遍采用B(2<=B<=36)进制计数。星球上的人们用美味的食物招待了小Z,作为回报,小Z希望送一个能够完成B进制加法的计算器给他们。 现在小Z希望你可以帮助他,编写实现B进制加法的程序。
输入输出格式
输入格式:
共3行第1行:一个十进制的整数,表示进制B。第2-3行:每行一个B进制数正整数。数字的每一位属于{0,1,2,3,4,5,6,7,8,9,A,B……},每个数字长度<=2000位。
输出格式:
一个B进制数,表示输入的两个数的和。
输入输出样例
输入样例#1:
4
123
321
输出样例#1:
1110
//数楼梯(高精度加法模板) #include<iostream>#include<cstdio>#include<cstring>#define fo(i,j,k) for(i=j;i<=k;i++)using namespace std;const char* output="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";int a[100005],b[100005],c[100005];char x[100005],y[100005]; inline int change(char p){ if(p>='A'&&p<='Z') return p-'A'+10; else return p-'0';}int main(){ int i,j,n; scanf("%d",&n); //进制 scanf("%s",x+1); scanf("%s",y+1); a[0]=strlen(x+1),b[0]=strlen(y+1); fo(i,1,a[0]) a[i]=change(x[a[0]-i+1]); fo(i,1,b[0]) b[i]=change(y[b[0]-i+1]); c[0]=max(a[0],b[0]); fo(i,1,c[0]) { c[i]+=a[i]+b[i]; c[i+1]+=c[i]/n; c[i]%=n; } if(c[c[0]+1]) c[0]++; for(i=c[0];i;i--) printf("%c",output[c[i]]); printf("\n"); return 0;}
【高精*单精 && 高精/单精】
NOIP 2012 国王游戏
这道题告诉了我们对拍的重要性(没对拍只A了一个点,拍一拍就找见错了)
//king#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#define fo(i,j,k) for(i=j;i<=k;i++)using namespace std;const int mxn=1005;int n;int mul[1000005],ans[1000005],tmp[1000005];struct node {int lef,rig;} a[mxn];inline bool comp(node x,node y) {return x.lef*x.rig<y.lef*y.rig;}inline void multi(int x){ int i,j,k; memset(tmp,0,sizeof tmp); tmp[0]=mul[0]; fo(i,1,mul[0]) { fo(i,1,mul[0]) tmp[i]=mul[i]*x; fo(i,1,mul[0]) tmp[i+1]+=tmp[i]/10,tmp[i]%=10; tmp[0]++; while(tmp[tmp[0]]) tmp[tmp[0]+1]+=tmp[tmp[0]]/10,tmp[tmp[0]]%=10,tmp[0]++; while(!tmp[tmp[0]]) tmp[0]--; fo(i,0,tmp[0]) mul[i]=tmp[i]; }}inline void chu(int x){ int i,j,now=0; memset(tmp,0,sizeof tmp); tmp[0]=mul[0]; for(i=mul[0];i;i--) { now=now*10+mul[i]; if(now<x) continue; tmp[i]=now/x; now=now%x; } while(!tmp[tmp[0]] && tmp[0]) tmp[0]--; if(tmp[0]<ans[0]) return; if(tmp[0]==ans[0]) { bool flag=0; for(i=tmp[0];i;i--) { if(tmp[i]>ans[i]) {flag=1;break;} if(tmp[i]>ans[i]) {flag=0;break;} } if(!flag) return; fo(i,0,tmp[0]) ans[i]=tmp[i]; } else fo(i,0,tmp[0]) ans[i]=tmp[i];}int main(){// freopen("rand.txt","r",stdin);// freopen("king.txt","w",stdout); int i,j,l,r; scanf("%d%d%d",&n,&l,&r); while(l) mul[++mul[0]]=l%10,l/=10; fo(i,1,n) scanf("%d%d",&a[i].lef,&a[i].rig); sort(a+1,a+n+1,comp); fo(i,1,n) { chu(a[i].rig); multi(a[i].lef); } for(i=ans[0];i;i--) printf("%d",ans[i]); if(ans[0]==0) printf("0"); printf("\n"); return 0;}
1 0
- [REVIEW] 高精度模板
- 高精度模板
- 高精度模板
- 高精度模板
- 高精度模板
- 高精度模板
- 高精度模板
- 高精度模板
- 高精度模板
- 高精度模板
- 高精度模板
- 高精度模板
- 高精度模板
- 高精度模板
- 高精度模板
- 高精度模板
- 【模板】高精度
- 高精度模板
- [DP Hash] 51Nod 1055 最长等差数列
- Linux:编辑命令sed
- [组合数] 51Nod 1161 Partial Sums & Codeforces 223C #138 (Div. 1) Partial Sums
- linux(CentOs6.5)环境变量
- [BZOJbegin][NOIP十连测第九场]小P的单调数列(数学相关+dp+bit)
- [REVIEW] 高精度模板
- 用FOR循环和WHILE循环实现跳动的心
- 【Netty in Action学习笔记】Netty核心组件概念
- mysql服务的注册,启动、停止、注销。 [delphi代码实现]
- 欧拉函数的计算
- 个人阶段总结
- JIH的玩偶
- 第十二周oj项目A运用递归倒序输出数字
- Clock函数计时