hdu 5050 大数
来源:互联网 发布:域名带数字好吗 编辑:程序博客网 时间:2024/06/05 00:38
http://acm.hdu.edu.cn/showproblem.php?pid=5050
大数模板最大公约数
信kuangbin,能AC
#include <cstdio>#include <cstdlib>#include <cmath>#include <cstring>#include <string>#include <queue>#include <vector>#include <iostream>#include <algorithm>using namespace std;#define RD(x) scanf("%d",&x)#define RD2(x,y) scanf("%d%d",&x,&y)#define clr0(x) memset(x,0,sizeof(x))const int maxn = 1010;struct Num{ int num[1100];};void print(const Num &hold){ int k; for (k = maxn; k >= 0; k --) if (hold.num[k]) break; for (int i = k; i >= 0; i --) printf("%d", hold.num[i]);}Num operator+(const Num &a, const Num &b){ Num ret; int temp; clr0(ret.num); for (int i = 0; i <= maxn; i ++) { temp = ret.num[i]; ret.num[i] = (temp + a.num[i] + b.num[i]) % 2; ret.num[i + 1] = (temp + a.num[i] + b.num[i]) / 2; } return ret;}bool operator==(const Num &a, int num){ for (int i = 0; i <= maxn; i ++) if (a.num[i] != num) return false; return true;}bool operator<(const Num &a, const Num &b){ for (int i = maxn; i >= 0; i --) { if (a.num[i] < b.num[i]) return true; else if (a.num[i] > b.num[i]) return false; } return true;}Num Complement(Num hold){ char str[1100]; Num ret, temp; strcpy(str, "1"); clr0(temp.num); int bit = 0,lls = strlen(str); for (int i = lls - 1; i >= 0; i --) temp.num[bit ++] = str[i] - '0'; ret = hold; for (int i = 0; i <= maxn; i ++) { if (ret.num[i]) ret.num[i] = 0; else ret.num[i] = 1; } ret = ret + temp; return ret;}Num operator-(const Num &a, const Num &b){ Num c, ret; c = Complement(b); ret = a + c; return ret;}Num operator/(const Num &hold, int num){ Num ret; clr0(ret.num); for (int i = 0; i < maxn; i ++) ret.num[i] = hold.num[i + 1]; return ret;}int operator%(const Num &hold, int num){ return hold.num[0];}Num gcd(Num a, Num b, int &counter){ while (true) { if (a < b) swap(a, b); if (b == 0) break; if (a % 2 == 0 && b % 2 == 0) { counter ++; a = a / 2; b = b / 2; } else if (a % 2 == 0 && b % 2 != 0) { a = a / 2; b = b; } else if (a % 2 != 0 && b % 2 == 0) { a = a; b = b / 2; } else { a = a - b; b = b; } } return a;}int main(){ int _;RD(_); char ta[1100], tb[1100]; int counter; Num a, b, ans ; int bit,cas = 1; while (_--) { printf("Case #%d: ",cas++); scanf("%s%s", ta, tb); int lla = strlen(ta),llb = strlen(tb); clr0(a.num); bit = 0; for (int i = lla - 1; i >= 0; i --) a.num[bit ++] = ta[i] - '0'; clr0(b.num); bit = 0; for (int i = llb - 1; i >= 0; i --) b.num[bit ++] = tb[i] - '0'; counter = 0; ans = gcd(a, b, counter); print(ans); while(counter--) printf("0"); puts(""); } return 0;}
0 0
- hdu 5050 大数
- HDU-5050 java大数
- HDU 5050 二进制大数GCD
- hdu 5050 java程序求大数最大公约数
- hdu 5050 java大数进制转换
- HDU 5050 Java 大数类+读入二进制
- hdu 5050 Divided Land (java大数)
- 【java 大数】hdu java 大数
- HDU 1002 --大数问题
- HDU 1297 (大数)
- hdu 1063 Exponentiation(大数)
- hdu 1002 大数相加
- HDU-1042(大数阶乘)
- hdu 1250 大数Fibonacci
- HDU 1502 dp + 大数
- hdu 1042 大数阶乘
- HDU 1316 大数
- HDU 1753 大数 strchr
- gic的其他一些术语
- Spring框架:Spring安全
- NSNotificationCenter 的使用详解
- Python算法笔试题目,破解Hash值,N进制法
- WCF部署时的异常错误“System.BadImageFormatException: 未能加载文件或程序集“GCGL_Service”或它的某一个依赖项。试图加载格式不正确的程序。”
- hdu 5050 大数
- ili9486 TFT 液晶显示屏
- debian 手动编译安装 emacs24
- 无线拖瀑布流实现解析
- 奇怪的++操作
- UVa 101 - The Blocks Problem
- 一个简单的日期选择器
- 【刷题小记198】数数
- GCD详解