题目:http://poj.org/problem?id=3197

分析:对于分数利用欧几里德算法可以写成连分数的形式,这样p和q很大,用Java大数写很方便。

import java.io.*;
import java.util.*;
import java.math.BigInteger;
public class Main
{
static final int N = 100005;
static BigInteger ans[] = new BigInteger[N];
static int cnt = 0;
static boolean EqualToZero(BigInteger x)
{
if(x.compareTo(BigInteger.ZERO) == 0) return true;
else return false;
}
static void gcd(BigInteger a,BigInteger b)
{
cnt = 0;
ans[cnt++] = a.divide(b);
BigInteger r = a.mod(b);
while(!EqualToZero(r))
{
a = b;
b = r;
ans[cnt++] = a.divide(b);
r = a.mod(b);
}
ans[cnt++] = BigInteger.ONE;
ans[cnt-2] = ans[cnt-2].subtract(BigInteger.ONE);
}
public static void main(String[] args)
{
Scanner cin = new Scanner(System.in);
int tt = 1;
while(cin.hasNextBigInteger())
{
BigInteger p = cin.nextBigInteger();
BigInteger q = cin.nextBigInteger();
if(EqualToZero(p) && EqualToZero(q)) break;
gcd(p,q);
System.out.println("Case "+(tt++)+":");
System.out.println(p+" / "+q);
int length = 3*(cnt-1);
for(int i=0;i<cnt;i++)
length += ans[i].toString().length();
int len = length;
int ct = 0;
for(int k=0;k<cnt-1;k++)
{
int pos = ans[k].toString().length() +  3;
int record = pos;
int num = length - pos;
int tmp = 0;
if(num % 2 == 1)
{
tmp = num / 2 + 1;
pos += tmp;
}
else
{
tmp = num / 2;
pos += tmp;
}
for(int i=1;i<=ct;i++)
System.out.print(".");
for(int i=1;i<=length;i++)
{
if(i == pos) System.out.print("1");
else System.out.print(".");
}
System.out.println("");
for(int i=1;i<=ct;i++)
System.out.print(".");
System.out.print(ans[k]+".+.");
for(int i=1;i<=num;i++)
System.out.print("-");
System.out.println("");
length -= record;
ct += record;
}
for(int i=1;i<len;i++)
System.out.print(".");
System.out.println("1");
}
}
}

POJ3197(连分数表示)相关推荐

  1. 新数学丛书《连分数》 习题 3.2

    把下面的每一个连分数表示成等价形式,但要具有奇数个部分商. (a)[2,1,1,4,1,1] 解: \begin{equation} 2+\dfrac{1}{1+\dfrac{1}{1+\dfrac{ ...

  2. 数论概论(Joseph H.Silverman) 定理39.2 连分数相邻收敛项之差定理

    设$\frac{p_0}{q_0},\frac{p_1}{q_1},\frac{p_2}{q_2},\cdots$为连分数$[a_0,a_1,a_2,\cdots]$的收敛项,则 \begin{equ ...

  3. 蓝桥杯--2013--黄金连分数(大数)

     4.黄金连分数 黄金分割数0.61803... 是个无理数,这个常数十分重要,在许多工程问题中会出现.有时需要把这个数字求得很精确. 对于某些精密工程,常数的精度很重要.也许你听说过哈勃太空望远 ...

  4. SPOJ 3899. Finding Fractions 连分数

    连分数乱搞,我反正是一眼没看出结果 某巨巨把这题讲解的比较详细 : http://blog.csdn.net/gogdizzy/article/details/8727386 令k = [a/b] 然 ...

  5. 连分数中一个有意思的小玩意儿

    该结论来自美国新数学丛书<连分数>的第8页.若$p$比$q$大,并且 \begin{equation} \frac{p}{q}=[a_1,a_2,\cdots,a_n] \end{equa ...

  6. 蓝桥杯 黄金连分数(BigDecimal的使用)

    标题: 黄金连分数 黄金分割数0.61803... 是个无理数,这个常数十分重要,在许多工程问题中会出现.有时需要把这个数字求得很精确. 对于某些精密工程,常数的精度很重要.也许你听说过哈勃太空望远镜 ...

  7. 2013 第4届 蓝桥杯 黄金连分数【详解】

    黄金连分数[题目] 黄金分割数0.61803- 是个无理数,这个常数十分重要,在许多工程问题中会出现.有时需要把这个数字求得很精确. 对于某些精密工程,常数的精度很重要.也许你听说过哈勃太空望远镜,它 ...

  8. Vijos P1696 数与连分数【连分数】

    背景 ... ...:"这个简单...我们还是去刚才的海边呗..." ...:"其实今晚...我是有一定要完成的事情的..." ., 威尼斯真的是一个美丽的城市 ...

  9. 数论概论(Joseph H.Silverman) 习题 39.1 $\sqrt{3}$和$\sqrt{5}$的连分数展开中的重复现象...

    计算$\sqrt{3}$和$\sqrt{5}$的连分数中的前10项. 解: \begin{align*} \sqrt{3}=1+\dfrac{1}{\dfrac{1}{\sqrt{3}-1}} \en ...

最新文章

  1. Git 工具 - 子模块 外部引用
  2. 无线网络连接无法停用
  3. 信息系统项目管理师论文基础知识
  4. 电信aep平台是什么意思_江苏天鼎证券:股票平台跳水是什么意思?股票为什么会跳水?...
  5. 服务器设计笔记(1)-----消息的封装
  6. php钩子配置,thinkphp 行为扩展 钩子与插件的实现
  7. python urllib3离线安装_离线安装spyder的Python环境
  8. hdu4009 Transfer water 最小树形图
  9. 虚拟摄像头之九: IMX8Q 的 camera.imx8.hal 框架详解
  10. Blender3.0资产浏览器
  11. Ubuntu更新显卡驱动及安装多版本cuda
  12. android 画爱心进度条_android自定义圆形进度条,实现动态画圆效果
  13. linux安装mailx发邮件
  14. Origin双坐标轴图表
  15. 【学习】关于网站中图片的各类交互
  16. OSChina 周一乱弹 ——有2个小混蛋大晚上……
  17. stable diffusion文字转图片(教程)
  18. android读写删file,Android文件(File)操作
  19. CPU被挖矿了,却找不到哪个进程!
  20. static变量会被垃圾回收吗_来自灵魂的拷问,你会扔垃圾了吗?

热门文章

  1. BeanFactory作为 IoC 容器示例
  2. 注解_自定义注解_属性定义
  3. 追踪源码自定义负载均衡策略
  4. Eureka的高可用
  5. MySQL常用存储引擎之Memory
  6. spring配置详解-复杂类型注入
  7. 生命html文档,Web前端第一季(HTML)
  8. rust腐蚀几人组队_直播圈近几年爆火的求生游戏,人渣基本已经凉凉,rust没挂不敢玩...
  9. oracle 11g goldengate与oracle 11g数据同步
  10. iptables学习笔记