4.8 T1

Problem 1 数学
题目描述 A 是一个学习认真的学生,M老师也对他赞誉有加,很是欣赏。
于是,A 被M老师叫到讲台上讲题。众所周知,A 比较胖,所以他希望找到讲台的某个点,也就是黄金分割点来使他被看起来更加美观。
A 没有计算器,他只能用分数逐渐逼近这个位置。
(虽然A可以脑跑 但是今天想来考验大家)

输入描述 输入文件只有一行,这一行有一个数 N,表示逼近该位置的分数分母≤N。
输出描述 输出文件只有一行,这一行有一个分数,格式为“x/y”,为你所输出的分数。
样例输入 7
样例输出 3/5
数据范围及提示 对于 20%数据 1<=N<=10
对于 100%数据 1≤N≤10^19

char -128 ~ +127 (1 Byte)
short -32767 ~ + 32768 (2 Bytes)
unsigned short 0 ~ 65536 (2 Bytes)
int -2147483648 ~ +2147483647 (4 Bytes)
unsigned int 0 ~ 4294967295 (4 Bytes)
long == int
long long -9223372036854775808 ~ +9223372036854775807 (8 Bytes)
double 1.7 * 10^308 (8 Bytes)
unsigned int 0~4294967295
long long的最大值:9223372036854775807
long long的最小值:-9223372036854775808
unsigned long long的最大值:1844674407370955161
__int64的最大值:9223372036854775807
__int64的最小值:-9223372036854775808
unsigned __int64的最大值:18446744073709551615

找斐波那契数i小于等于n,并且i+1的斐波那契数>n;分子就等于i-1的斐波那契数,分母等于i的斐波那契数。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
using namespace std;
typedef unsigned long long LL;
LL f[10000000];
void read(LL &n)
{
    n = 0;
    char a = getchar();
    while(a<'0'||a>'9')
        a = getchar();
    while(a>='0'&& a<='9')
    {
        n*=10;
        n+=a-'0';
        a = getchar();
    }
}
int main()
{
    LL m,n;
    LL fz,fm;
    read(n);
    f[0]=0;
    f[1]=1;
    if(n==1)
        fz=1,fm=1;
    else
    {
        for(int i=2;i<=1000000000;i++)
        {
            f[i]=f[i-1]+f[i-2];
            if(f[i]>n)
            {
                m=i-1;
                break;
            }   
        }
        fz=f[m-1],fm=f[m];
    }
    printf("%I64d/%I64d", fz, fm);
    return 0;       
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值