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

solution1

直观上的分数处理

cpp 复制代码
#include <iostream>
using namespace std;
int main()
{
  printf("1048575/524288");
  return 0;
}
cpp 复制代码
#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,则两者互质
cpp 复制代码
#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;
}
相关推荐
励志的小陈2 分钟前
数据结构--队列(C语言实现)
c语言·开发语言·数据结构
门左有棵树21 分钟前
蓝桥杯C++组算法知识点整理(考前急救)
c++·算法·蓝桥杯
zjeweler32 分钟前
“网安+护网”终极300多问题面试笔记-1共3-内网&域相关
笔记·web安全·网络安全·面试·职场和发展·护网面试
吃着火锅x唱着歌36 分钟前
LeetCode 678.有效的括号字符串
算法·leetcode·职场和发展
m0_716765232 小时前
数据结构--单链表的插入、删除、查找详解
c语言·开发语言·数据结构·c++·笔记·学习·visual studio
itman3013 小时前
C语言printf输出格式:%d %f %s等用法详解
c语言·字符串·printf·格式化输出·整数
killerbasd3 小时前
牧苏苏传 苏苏苏苏苏苏苏 4/15
面试·职场和发展
我不是懒洋洋3 小时前
【经典题目】链表OJ(相交链表、环形链表、环形链表II、随机链表的复制)
c语言·开发语言·数据结构·链表·ecmascript·visual studio
聆风吟º3 小时前
【C标准库】深入理解C语言strstr函数:子字符串查找的实用指南
c语言·开发语言·库函数·strstr
算法鑫探3 小时前
C语言实现 简易计算器教程
c语言·数据结构·算法·新人首发