第九届蓝桥杯大赛个人赛省赛(软件类)真题C 语言 A 组-分数

在这里插入图片描述

solution1

直观上的分数处理

#include <iostream>
using namespace std;
int main()
{
  printf("1048575/524288");
  return 0;
}
#include<stdio.h>
#include<math.h>
typedef long long ll;
struct fraction{
	ll up, down;
};
ll gcd(ll a, ll b){
	if(!b) return a;
	return gcd(b, a % b);
}
fraction r(fraction f){
	if(gcd(f.down, f.up) > 1){
		f.down /= gcd(f.down, f.up);
		f.up /= gcd(f.down, f.up);
	}
	return f;
}
fraction add(fraction f1, fraction f2){
	fraction f;
	f.down = f1.down * f2.down;
	f.up = f1.up * f2.down + f2.up * f1.down;
	return r(f);
}
int main(){
	fraction f, t;
	f.up = f.down = 1;
	for(ll i = 2; i <= pow(2, 19); i *= 2){
		t.up = 1;
		t.down = i;
		printf("%lld %lld\n", t.down, f.up);
		f = add(f, t);
	}
	printf("%lld %lld, %lld %lld", f.up / f.down, f.up % f.down, f.up, f.down);
	return 0;
}

solution2

手动通分计算为
(219+218+217……+20)/219= (220-1)/219

  • 20+21+22+……+2n-1 = 2n-1
    在这里插入图片描述
  • 较大的数若比 较小的数 的两倍大于或者小1,则两者互质
#include<stdio.h>
#include<math.h>
typedef long long ll;
int main(){
	printf("%lld/%lld", (ll) pow(2, 20) - 1, (ll) pow(2, 19));//注意别漏了强转double -> ll
	return 0;
}

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-27 10:38:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-27 10:38:03       100 阅读
  3. 在Django里面运行非项目文件

    2024-03-27 10:38:03       82 阅读
  4. Python语言-面向对象

    2024-03-27 10:38:03       91 阅读

热门阅读

  1. VR虚拟仿真在线模拟旅游专业情景

    2024-03-27 10:38:03       46 阅读
  2. 一些常见的Ansible问题和答案

    2024-03-27 10:38:03       40 阅读
  3. 防火墙技术

    2024-03-27 10:38:03       39 阅读
  4. 使用SqlDataAdapter和DataSet维护数据库表数据

    2024-03-27 10:38:03       35 阅读
  5. Ansible剧本playbooks详解

    2024-03-27 10:38:03       34 阅读
  6. C语言学习笔记day13

    2024-03-27 10:38:03       38 阅读
  7. SQLAlchemy中query函数的使用

    2024-03-27 10:38:03       35 阅读
  8. 微信小程序怎么从服务器中获取数据

    2024-03-27 10:38:03       45 阅读
  9. Candle - HuggingFace Rust AI 框架 - 小记

    2024-03-27 10:38:03       30 阅读