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;
}

hdu 5050 大数的更多相关文章

  1. HDU 5050

    http://acm.hdu.edu.cn/showproblem.php?pid=5050 大数gcd import java.io.* ; import java.math.* ; import ...

  2. HDU - 5050 (大数二进制gcd)

    It's time to fight the local despots and redistribute the land. There is a rectangular piece of land ...

  3. hdu 5050 java程序求大数最大公约数

    import java.io.*; import java.math.*; import java.util.*; import java.text.*; public class Main { pu ...

  4. hdu 1002大数(Java)

    A + B Problem II Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  5. hdu 5047 大数找规律

    http://acm.hdu.edu.cn/showproblem.php?pid=5047 找规律 信kuangbin,能AC #include <stdio.h> #include & ...

  6. hdu 4759 大数+找规律 ***

    题目意思很简单. 就是洗牌,抽出奇数和偶数,要么奇数放前面,要么偶数放前面. 总共2^N张牌. 需要问的是,给了A X B Y  问经过若干洗牌后,第A个位置是X,第B个位置是Y 是不是可能的. Ja ...

  7. HDU 1018 大数(求N!的位数/相加)

    Big Number Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total ...

  8. HDU 4927 大数运算

    模板很重要 #include <cstdio> #include <cstring> #include <cstdlib> #include <iostrea ...

  9. HDU 5050 Divided Land(进制转换)

    题意  给你两个二进制数m,n   求他们的最大公约数  用二进制表示  0<m,n<2^1000 先把二进制转换为十进制  求出最大公约数  再把结果转换为二进制  数比較大要用到大数 ...

随机推荐

  1. C# 关闭进程的时候总是捕捉到System.Threading.ThreadAbortException: 正在中止线程

    C# 关闭进程的时候总是捕捉到System.Threading.ThreadAbortException: 正在中止线程 这是由ThreadAbortException抛出的 可以写成下面的样子 tr ...

  2. Git二进制文件冲突解决

    Git二进制文件冲突解决 在我们合并分支的时候,如果两个分支都进行了修改那么就会产生合并冲突.对于非二进制文件的冲突解决,git会给出冲突的位置我们可以手动修改然后再commit.但是对于非二进制文件 ...

  3. windows下git的使用方法(码云)

    这表文章主要是用了可视化操作: 使用命令行操作:https://www.cnblogs.com/mswyf/p/9370238.html 一.安装Git Bash 为了在windows下使用Git,我 ...

  4. lazarus的动态方法和虚拟方法

    动态方法和虚拟方法在delphi里面分别表示: 动态方法 当需要调用父类.祖先类的被覆盖方法的时候,是查找继承树,当找到,就调用.减少了VMT占用,但调用慢一些. 虚拟方法 和动态方法不同的是,记录了 ...

  5. [Robot Framework] Jenkins上调用Rebot命令时执行报错不往下执行其他命令

    在配置jenkins job时,添加构建步骤Execute Windows batch command,输入执行rebot命令 报错信息: Call C:\Python27\Scripts\rebot ...

  6. php服务器---IIS一些问题

    配置网上很多博客都介绍过..这里不作详细说明了..将PHP目录(D:\PHP\PHP)下的php.ini-recommended或者php.ini-dist改名为php.ini,并找到extensio ...

  7. OneZero第三周第三次站立会议(2016.4.6)

    1. 时间: 13:05--13:15  共计10分钟. 2. 成员: X 夏一鸣 * 组长 (博客:http://www.cnblogs.com/xiaym896/), G 郭又铭 (博客:http ...

  8. DockerDesktop简单安装和使用

    一.在windows10下,安装DockerDesktop: 1.检查windows版本为企业版或专业版,并开启Hyper-v系统设置:电脑的控制面板->程序->启用或关闭Windows功 ...

  9. Rigidbody.Is Kinematic和碰撞体

    Rigidbody组件拥有一个Is Kinematic的属性,该属性可以将其从引擎的控制中移除,从而可以用脚本控制GO的运动.注意:尽量不要使用脚本控制该属性的开关. Colliders(碰撞器) C ...

  10. kbmmw 5.05.00 发布

    新年前最后几天,kbmmw 发布了新版本,增加一大波功能.we are happy to announce v5.05.50 of our popular middleware for Delphi ...