大数处理
来源:互联网 发布:网络支付清算平台 编辑:程序博客网 时间:2024/05/22 05:16
<p style="color: rgb(51, 51, 51); font-family: Arial; font-size: 14px; line-height: 26px;">题意:给定一个长方形,将该长方形切分成几个面积相等且边最大的正方形,求这样的正方形的最大边长,难点在于长方形边长为二进制形式,输出的正方形边长也为二进制,另外该题数据量巨大2^1000。</p><p style="color: rgb(51, 51, 51); font-family: Arial; font-size: 14px; line-height: 26px;">解题思路:由于该题数据量巨大,所以要用到大数处理方法,不过不用担心,对于大数有专门的模板,可以说这道题是模板题,直接看代码吧。</p>
#include <iostream>#include <cstdio>#include <cstring>#define MAXN 1000using namespace std;struct BigNumber{ int len; int v[MAXN];};bool isSmaller(BigNumber n1,BigNumber n2){ if(n1.len<n2.len) return 1; if(n1.len>n2.len) return 0; for(int i=n1.len-1;i>=0;i--) { if(n1.v[i]<n2.v[i]) return 1; if(n1.v[i]>n2.v[i]) return 0; } return 0;}BigNumber Minus(BigNumber n1,BigNumber n2){ BigNumber ret; int borrow,i,temp; ret=n1; for(borrow=0,i=0;i<n2.len;i++) { temp=ret.v[i]-borrow-n2.v[i]; if(temp>=0) { borrow=0; ret.v[i]=temp; } else { borrow=1; ret.v[i]=temp+2; } } for(;i<n1.len;i++) { temp=ret.v[i]-borrow; if(temp>=0) { borrow=0; ret.v[i]=temp; } else { borrow=1; ret.v[i]=temp+2; } } while(ret.len>=1 && !ret.v[ret.len-1]) ret.len--; return ret;}BigNumber div2(BigNumber n){ BigNumber ret; ret.len=n.len-1; for(int i=0;i<ret.len;i++) ret.v[i]=n.v[i+1]; return ret;}void gcd(BigNumber n1,BigNumber n2,int j){ long b=0,i; while(n1.len && n2.len) { if(n1.v[0]) { if(n2.v[0]) { if(isSmaller(n1,n2)) n2 = Minus(n2,n1); else n1 = Minus(n1,n2); } else n2=div2(n2); } else { if(n2.v[0]) n1=div2(n1); else { n1=div2(n1); n2=div2(n2); b++; } } } printf("Case #%d: ",j); if(n2.len) for(i=n2.len-1;i>=0;i--) printf("%d",n2.v[i]); else for(i=n1.len-1;i>=0;i--) printf("%d",n1.v[i]); while(b--) printf("0"); printf("\n");}int main(){ int cases,le,i; BigNumber n1,n2; char str1[MAXN],str2[MAXN]; scanf("%d",&cases); for(int j = 1; j <= cases; j++) { scanf("%s%s",str1,str2); le=strlen(str1); n1.len=le; for(i=0;i<le;i++) n1.v[i]=str1[le-1-i]-'0'; le=strlen(str2); n2.len=le; for(i=0;i<le;i++) n2.v[i]=str2[le-1-i]-'0'; gcd(n1,n2,j); } return 0;}
0 0
- 大数处理----大数相加
- 大数处理
- 处理大数
- 大数处理
- 大数处理
- 大数处理
- 大数处理
- “大数处理“
- 大数处理---大数相减
- 大数阶乘---处理大数范例
- HD1013 大数处理
- java 处理大数
- JAVA大数的处理
- java 处理大数
- ACM大数的处理
- JAVA 处理 大数 POJ1001
- Java中处理大数
- C语言大数处理
- 【内核研究】保证包裹内参数顺序aidl工具的使用(上)
- mysqldump 生成.gz文件
- android 中的栈
- NS3学习记录(一)---Ubuntu下安装NS3
- Android反射机制
- 大数处理
- 操作系统进程调度,优先级反转,调度策略
- NS3学习记录(二)---eclipse调试NS3配置
- OSX中php多进程安装pcntl
- [LeetCode]Construct Binary Tree from Preorder and Inorder Traversal
- NS3学习记录(三)---一些统计工具安装
- 实现提取南工oj的题号、标题、通过率
- 如何在Eclipse中配置python开发环境
- 【Axure教程】Axure中使用表格的技巧