Description

Golden ratio base (GRB) is a non-integer positional numeral system that uses the golden ratio (the irrational number (1+√5)/2 ≈ 1.61803399 symbolized by the Greek letter φ) as its base. It is sometimes referred to as base-φ, golden mean base, phi-base, or, phi-nary.       
Any non-negative real number can be represented as a base-φ numeral using only the digits 0 and 1, and avoiding the digit sequence "11" � this is called a standard form. A base-φ numeral that includes the digit sequence "11" can always be rewritten in standard form, using the algebraic properties of the base φ ― most notably that φ + 1 = φ 2 . For instance, 11(φ) = 100(φ). Despite using an irrational number base, when using standard form, all on-negative integers have a unique representation as a terminating (finite) base-φ expansion. The set of numbers which possess a finite base-φ representation is the ring Z[1 + √5/2]; it plays the same role in this numeral systems as dyadic rationals play in binary numbers, providing a possibility to multiply.       
Other numbers have standard representations in base-φ, with rational numbers having recurring representations. These representations are unique, except that numbers (mentioned above) with a terminating expansion also have a non-terminating expansion, as they do in base-10; for example, 1=0.99999….       
Coach MMM, an Computer Science Professor who is also addicted to Mathematics, is extremely interested in GRB and now ask you for help to write a converter which, given an integer N in base-10, outputs its corresponding form in base-φ.      
              

Input

There are multiple test cases. Each line of the input consists of one positive integer which is not larger than 10^9. The number of test cases is less than 10000. Input is terminated by end-of-file.      
              

Output

For each test case, output the required answer in a single line. Note that trailing 0s after the decimal point should be wiped. Please see the samples for more details.      
              

Sample Input

1
2
3
6
10
              

Sample Output

1
10.01
100.01
1010.0001
10100.0101

Hint

 
 
由于φ + 1 = φ 2,两边同乘φ k,得到φ k+1+φ k=φ k+2,说明只有有两位是1,就往前进一位。此外由φ + 1 = φ 2推到的2φ 2=φ 3+1,同理可知:φ k+3+φ k=2φ k+2,说明每一位的2都可以,由它前一位和它的后两位的1构成,这样就能将所有大于2的数降成1.再配合之前的,反复模拟便可得。由于当场没有估算这个数的长度,所以采用两个数组分别存了整数部分和小数部分。整体效率不是非常高,但是在短时间内做出来还是很高兴的。
 
 
代码:
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <set>
#include <map>
#include <vector>
#include <queue>
#include <string>
#define inf 0x3fffffff
#define esp 1e-10
#define N 100 using namespace std; int z[N], x[N], lenz, lenx; bool judge ()
{
if(z[0] && x[0])
return 0;
for (int i = 0; i < lenx; ++i)
if (x[i] > 1 || (x[i] && x[i+1]))
return 0; for (int i = 0; i < lenz; ++i)
if (z[i] > 1 ||(z[i] ==1 && z[i+1] == 1))
return 0; return 1;
} void doz (int i)
{
if (i == lenz-1)
lenz++;
int up = z[i] / 2;
z[i] = z[i] & 1;
z[i+1] += up;
if (i >= 2)
z[i-2] += up;
else
{
if (lenx < 3 - i)
lenx = 3 - i;
x[1-i] += up;
}
} void dox (int i)
{
if (i+3 > lenx)
lenx = i + 3;
int up = x[i] / 2;
x[i] = x[i] & 1;
x[i+2] += up;
if (i == 0)
z[0] += up;
else
x[i-1] += up;
} void qt (int n)
{
memset (z, 0, sizeof(z));
memset (x, 0, sizeof(x));
lenz = 1;
lenx = 0;
z[0] = n;
while (!judge ())
{
for (int i = lenx-1; i >= 0; --i)
{ if (i == 0 && x[i] > 0 && x[i+1] > 0)
{
int up = min (x[i], x[i+1]);
z[0] += up;
x[0] -= up;
x[1] -= up;
continue;
}
else if (x[i] > 0 && x[i+1] > 0)
{
int up = min (x[i], x[i+1]);
x[i-1] += up;
x[i+1] -= up;
x[i] -= up;
continue;
}
if (x[i] > 1)
{
dox (i);
continue;
} }
while(x[lenx-1] == 0)
lenx--;
for (int i = 0; i < lenz; ++i)
{ if (i == 0 && z[i] > 0 && x[0] > 0)
{
if (i == lenz-1)
lenz++;
int up = min (z[i], x[0]);
z[1] += up;
z[0] -= up;
x[0] -= up;
continue;
}
else if (z[i] > 0 && z[i+1] > 0)
{
if (i+3 > lenz)
lenz = i + 3;
int up = min (z[i], z[i+1]);
z[i+2] += up;
z[i+1] -= up;
z[i] -= up;
continue;
}
if (z[i] > 1)
{
doz(i);
continue;
}
}
}
while(x[lenx-1] == 0)
lenx--;
} int main()
{
//freopen ("test.txt", "r", stdin);
int n;
while (scanf ("%d", &n) != EOF)
{
qt (n);
for (int i = lenz - 1; i >= 0; --i)
printf ("%d", z[i]);
if (lenx > 0)
printf (".");
for (int i = 0; i < lenx; ++i)
printf ("%d", x[i]);
printf ("\n");
}
return 0;
}

ACM学习历程——HDU4814 Golden Radio Base(数学递推) (12年成都区域赛)的更多相关文章

  1. ACM学习历程—HDU 5459 Jesus Is Here(递推)(2015沈阳网赛1010题)

    Sample Input 9 5 6 7 8 113 1205 199312 199401 201314 Sample Output Case #1: 5 Case #2: 16 Case #3: 8 ...

  2. ACM学习历程—HDU1023 Train Problem II(递推 && 大数)

    Description As we all know the Train Problem I, the boss of the Ignatius Train Station want to know  ...

  3. ACM学习历程—ZOJ 3777 Problem Arrangement(递推 && 状压)

    Description The 11th Zhejiang Provincial Collegiate Programming Contest is coming! As a problem sett ...

  4. ACM学习历程—HDU 5326 Work(树形递推)

    Problem Description It’s an interesting experience to move from ICPC to work, end my college life an ...

  5. AndyQsmart ACM学习历程——ZOJ3872 Beauty of Array(递推)

    Description Edward has an array A with N integers. He defines the beauty of an array as the summatio ...

  6. ACM学习历程—HDU 5512 Pagodas(数学)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5512 学习菊苣的博客,只粘链接,不粘题目描述了. 题目大意就是给了初始的集合{a, b},然后取集合里 ...

  7. ACM学习历程—SNNUOJ1213 加油站问题(动态规划 || 数学)

    题目链接:http://219.244.176.199/JudgeOnline/problem.php?id=1213 这是这次微软实习面试的一道题,当时只相出了一个2n的做法,面试官让我优化成n的做 ...

  8. ACM学习历程—HDU 5073 Galaxy(数学)

    Description Good news for us: to release the financial pressure, the government started selling gala ...

  9. ACM学习历程—FZU2191完美的数字(数学)

    Description Bob是个很喜欢数字的孩子,现在他正在研究一个与数字相关的题目,我们知道一个数字的完美度是 把这个数字分解成三个整数相乘A*A*B(0<A<=B)的方法数,例如数字 ...

随机推荐

  1. 应对ie双外边距,不使用hack

    1.在浮动元素内层加一层div 2.使用不浮动的内层外边距来定义距离 ie在浮动时,并且使用外边距,会产生双倍外边距.

  2. Mysql 的存储引擎,myisam和innodb的区别。

    简单的表达. MyISAM 是非事务的存储引擎. innodb是支持事务的存储引擎. innodb的引擎比较适合于插入和更新操作比较多的应用 而MyISAM 则适合用于频繁查询的应用 MyISAM - ...

  3. iOS:苹果企业证书通过网页分发安装app

    本文转载至 http://blog.sina.com.cn/s/blog_6afb7d800101fa16.html 苹果的企业级证书发布的应用,是不用设备授权即可直接安装,并且不限设备上限.为了方便 ...

  4. Java 集成域登陆

    参考: 1. JAVA中使用jcifs集成AD域用户认证 2. https://liaosy.iteye.com/blog/1887092 3.其他库 https://github.com/Waffl ...

  5. 通用安防摄像机通过RTSP转RTMP推流进行H5(RTMP/HLS)直播的方案

    EasyNVR摄像机无插件直播方案 随着互联网的发展,尤其是移动互联网的普及,基于H5.微信的应用越来越多,企业也更多地想基于H5.微信公众号来快速开发和运营自己的视频及视频相关性产品,那么传统的安防 ...

  6. 怎么用cookie解决选项卡问题刷新后怎么保持原来的选项?

    什么是cookie? Cookies虽然一般都以英文名呈现,但是它还是有一个可爱的中文名“小甜饼”.Cookies是指服务器暂存放在你的电脑里的txt格式的文本文件资料,主要用于网络服务器辨别电脑使用 ...

  7. $CLASS('page__hd')[0].style.backgroundColor="red"

    const $ID = (p) => document.getElementById(p)const $CLASS = (p) => document.getElementsByClass ...

  8. Cocos2d-js官方完整项目教程翻译:六、添加Chipmunk物理引擎在我们的游戏世界里

    添加Chipmunk物理引擎在我们的游戏世界里         一.简介                   cocos2d JS能给我们力量来创造令人印象深刻的游戏世界.但缺乏某种现实.       ...

  9. SPFA的两个优化:SLF与LLL

    先举出个例题:洛谷P3371 [模板]单源最短路径 一眼扫去:最短路径. spfa不接受反驳... 附上代码: #include<iostream> #include<algorit ...

  10. PowerDesigner 125 导致 Word 2007文档内容无法选中以及点击鼠标没用