首页 > 代码库 > HDU 4814
HDU 4814
题目的大意就是用(1+√5)/2进制来表示十进制中的数。
做法就是一个模拟,a[]数组表示答案,其中第50位表示个位,后面的是小数位。
利用题目给的两个公式,进行一系列进位等操作。
#include <iostream>#include <cstdio>#include <cstring>using namespace std;#define maxn 110int a[maxn];int main(){ //freopen("out(2).txt", "w", stdout); int n; while(scanf("%d", &n) != EOF) { if(n == 1) { printf("1\n"); continue; } memset(a, 0, sizeof(a)); a[50] = n; int f = 1; while(f) { f = 0; for(int i = 100; i >= 0; i--) { if(a[i] > 1) { f = 1; int t = a[i] / 2; a[i] -= t * 2; a[i-1] += t; a[i+2] += t; } } for(int i = 100; i >= 0; i--) { if(a[i+1] && a[i+2]) { f = 1; int t = min(a[i+1], a[i+2]); a[i+1] -= t; a[i+2] -= t; a[i] += t; } } } f = 0; int f1 = 0; for(int i = 0; i <= 50; i++) { if(a[i] == 0) { if(f) printf("0"); } else { printf("1"); f = 1; } } if(f == 0) printf("0"); f = 0; for(int i = 51; i < 100; i++) { if(a[i] == 0) f++; else { if(!f1) { f1 =1; printf("."); } for(int j = 0; j < f; j++) printf("0"); printf("1"); f = 0; } } cout << endl; }}
但是奇怪的是,当我调换了循环的顺序,从前向后循环就会出现一个错误的结果,很是不解。
HDU 4814
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。