ACM: 小数转分数 toj 1336

C++将小数化成分数 阅读详情

小数化分数 

描述

Ray 在数学课上听老师说,任何小数都能表示成分数的形式,他开始了化了起来,很快他就完成了,但他又想到一个问题,如何把一个循环小数化成分数呢?
请你写一个程序不但可以将普通小数化成最简分数,也可以把循环小数化成最简分数。

输入

第一行是一个整数N,表示有多少组数据。
每组数据只有一个纯小数,也就是整数部分为0。小数的位数不超过9位,循环部分用()括起来。

输出

对每一个对应的小数化成最简分数后输出,占一行。

样例输入

3
0.(4)

0.5
0.32(692307)

样例输出

4/9

1/2
17/52

题意: 任何纯小数转化为分数.

解题思路:
             1. 一开始遇见, 毫无头绪, 小数怎么转分数.
             2. 查阅资料发现:
             
普通小数转为分数,分母为10的次幂即10、100、1000、10000……
         0.1=1/10
         0.2=2/10=1/5
         0.34=34/100
         0.987=987/1000
         0.125=125/1000=1/8
         12.125=12又1/8
       无限循环小数转为分数,以9、99、999、9999……为分母,循环节为分子
         0.3(3循环)=3/9=1/3
         0.28(28循环)=28/99
         0.16(6循环)=0.1+0.06(6循环)= 1/10+6/90=15/90=1/6
       3. 剩下就是配合gcd处理问题.

代码:
#include <cstdio>
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <cmath>
using namespace std;
#define MAX 25

char str[MAX];
char num1[MAX], num2[MAX];

int gcd(int a,int b)
{
    if(b == 0) return a;
    else return gcd(b,a%b);
}

void solve()
{
    int len, m, length, nn, t, n1, d;
    char *p;
    p = strchr(str,'(');
    if(p != NULL)
    {
        p++;
        str[strlen(str)-1] = '\0'; //去除最后的')'
        length = (p-str)-3; //前端不循环的长度
        m = 1;
        for(int i = strlen(p); i > 0; --i) m *= 10;
        m--;
        t = m; //9的个数
       
        for(int i = 0; i < length; ++i) m *= 10; //循环部分转化为分数的分母
        n1 = strtol(p,NULL,10); //后端循环小数
        p--;
        *p = '\0';
        len = strlen(str);
        for(p = str+2; *p; ++p)
            if( (*p) != '0' )
                break;
        nn = strtol(p,NULL,10); //前面不循环的小数
        nn *= t;
        n1 += nn;
        d = gcd(n1,m);
        printf("%d/%d\n",n1/d,m/d);
    }
    else
    {
        len = strlen(str);
        m = 1;
        for(int i = 2; i < len; ++i) m *= 10;
        for(p = str+2; *p; ++p)
            if( (*p) != '0' )
                break;
        n1 = strtol(p,NULL,10);
        d = gcd(n1,m);
        printf("%d/%d\n",n1/d,m/d);
    }
}

int main()
{
//    freopen("input.txt","r",stdin);
    int caseNum;
    scanf("%d",&caseNum);
    while(caseNum--)
    {
        scanf("%s",str);
    //    read_num(str);
        solve();
    }
    return 0;
}
网闸的基本配置 本文详细介绍了网闸的基本配置流程,包括物理连接与初始化、网络基础配置、核心数据交换策略配置、安全增强配置、管理与运维以及测试验证等关键步骤。网闸通过在物理隔离环境下建立"数据摆渡通道",实现特定业务数据的安全交换。配置时应遵循最小化、单向化、内容控制和审计原则,确保只开放必要通道,优先采用单向传输,进行内容安全检查并记录操作日志。不同厂商网闸的配置界面可能不同,但核心逻辑是相通的。 阅读详情

相关推荐

LLC谐振变换器中的软开关艺术:ZVS与ZCS的协同设计

本文深入解析了LLC谐振变换器如何通过巧妙的电路设计,协同实现零电压开关(ZVS)与零电流开关(ZCS),从而大幅降低开关损耗与电磁干扰,提升电源效率。文章结合设计实战,详细阐述了谐振参数计算、器件选型及调试避坑指南,为高效、高功率密度电源设计提供了核心思路与解决方案。

weixin_29216957的博客 321

小数化成最简式分数

这道题是好久以前写的了。#include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; const int MAX = 20; int gcd(int x, int y)

菜鸟 1451

基于深度学习的图像修复算法python源码+数据集+论文文档(毕业设计)

基于深度学习的图像修复算法python源码+数据集+论文文档(毕业设计),个人经导师指导并认可通过的高分设计项目,评审分99分,代码完整确保可以运行,小白也可以亲自搞定,主要针对计算机相关专业的正在做大作业的学生和需要项目实战练习的学习者,可作为毕业设计、课程设计、期末大作业,代码资料完整,下载可用。基于深度学习的图像修复算法python源码+数据集+论文文档(毕业设计)基于深度学习的图像修复算法python源码+数据集+论文文档(毕业设计)基于深度学习的图像修复算法python源码+数据集+论文文档(毕业设计)基于深度学习的图像修复算法python源码+数据集+论文文档(毕业设计)基于深度学习的图像修复算法python源码+数据集+论文文档(毕业设计)基于深度学习的图像修复算法python源码+数据集+论文文档(毕业设计)基于深度学习的图像修复算法python源码+数据集+论文文档(毕业设计)基于深度学习的图像修复算法python源码+数据集+论文文档(毕业设计)基于深度学习的图像修复算法python源码+数据集+论文文档(毕业设计)基于深度学习的图像修复算法python源码+数据集+论文文档(毕业设计)基于深度学习的图像修复算法python源码+数据集+论文文档(毕业设计)基于深度学习的图像修复算法python源码+数据集+论文文档(毕业设计)基于深度学习的图像修复算法python源码+数据集+论文文档(毕业设计)基于深度学习的图像修复算法python源码+数据集+论文文档(毕业设计)基于深度学习的图像修复算法python源码+数据集+论文文档(毕业设计)基于深度学习的图像修复算法python源码+数据集+论文文档(毕业设计)基于深度学习的图像修复算法python源码+数据集+论文文档(毕业设计)基于深度学习的图像修复算法python源码+数据集+论文文档(毕业设计

小数分数

这是一个C语言的程序,但是也可以用c++中的类去写,并且用c++,中的类去写还会有可以对我们的数可以运算的优点,我将会贴出我的两种算法。 第一种:C语言形式 #include <iostream> #include <malloc.h> using namespace std; /*用包括main函数在内的多个函数,实现小数分数换: 向字符数组输入一个大于0的有限纯小数,输出其最简分数(例如,输入0.4,输出2/5;输入0.0125,输出1/80。小数部分不超过8位),

qq_62198509的博客 4134

小数换为分数形式

#include #include #define MaxDecimalLength 40typedef struct decimals{ int d; int f;}decimals;int FindGDC(int a,int b){ int i = a<b?a:b; for(;i>1;i--) { if(a%i==0&&b%i==0)

上善若水的专栏 1887

小数分数2

Description Ray 在数学课上听老师说,任何小数都能表示成分数的形式,他开始了化了起来,很快他就完成了,但他又想到一个问题,如何把一个循环小数化成分数呢?  请你写一个程序不但可以将普通小数化成最简分数,也可以把循环小数化成最简分数。    Input 第一行是一个整数N,表示有多少组数据。  每组数据只有一个纯小数,也就是整数部分为0。小数的位

u013776243的专栏 1283

HDOJ 1717 小数分数2 (数学,循环小数分数详细讲解)

小数分数2 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 4043    Accepted Submission(s): 1649 Problem Description Ray 在数学课上听老师说,任

Chunzhen的博客 5166

小数分数

描述 Ray 在数学课上听老师说,任何小数都能表示成分数的形式,他开始了化了起来,很快他就完成了,但他又想到一个问题,如何把一个循环小数化成分数呢? 请你写一个程序不但可以将普通小数化成最简分数,也可以把循环小数化成最简分数。 输入 第一行是一个整数N,表示有多少组数据。 每组数据只有一个纯小数,也就是整数部分为0。小数的位数不超过9位,循环部分用()括起来。 输出

吃葡萄不吐葡萄皮 2012

分数的创建、化简、四则运算与输出————附带C/C++实现代码和示例

文章目录1 分数表示和简化1.1 表示1.2 分数化简 1 分数表示和简化 1.1 表示 写成假分数的形式,无论分子比分母大或者小,都保留其原数。 struct Fraction//分数 { int up, down;//分子、分母 }; 用Fraction类型表示分数,或者定义数组表示一堆分数。 制定表示的规则: 1 使down为非负数。如果分数为负数,up为负数即可; 2 如果...

韩江雪de 小屋 4715

小数分数,带小数分数以及无限循环小数分数

1.纯小数分数 假设当前小数为0.abc 分数方式如下: ①将小数点右移至最后一位右边 目前数字变为abc,记录右移位数x。 ②分子p目前为abc,分母q为10 ^ x。 ③设d = gcd(p, q), 小数0.abc则可表示为 (p / d) / (q / d) 其他位数的纯小数以此类推。 2.带小数分数 假设当前小数为d.abc 先提出整数部分,对小数部分进行上面...

bravo的博客 1143

C-纯小数分数

Ray 在数学课上听老师说,任何小数都能表示成分数的形式,他开始化了起来,但小数很多,手工化起来很费劲,请你写一个程序把一个纯小数(0

live_z的博客 931

[C++]小数化为分数(class)

/*Rational.cpp*/#include "Rational.h" #include #include #include using namespace std; void Rational::change(string num, int fz, int fm) { bool flag = 0; char ch; for (int i = 0; i < num.length(

yuchenchenyi的博客 6637

leetcode LCP2 分式化简(C++)

有一个同学在学习分式。他需要将一个连分数化成最简分数,你能帮助他吗? 连分数是形如上图的分式。在本题中,所有系数都是大于等于0的整数。 输入的cont代表连分数的系数(cont[0]代表上图的a0,以此类推)。返回一个长度为2的数组[n, m],使得连分数的值等于n / m,且n, m最大公约数为1。 示例 1: 输入:cont = [3, 2, 0, 2] 输出:[13...

qq_27060423的博客 1058

hdu 1717 小数分数2

给大家提供一个资料 http://zhidao.baidu.com/question/15843599.html 众所周知,有限小数是十进分数的另一种表现形式,因此,任何一个有限小数都可以直接写成十分之几、百分之几、千分之几……的数。那么无限小数能否化成分数?首先我们要明确,无限小数可按照小数部分是否循环分成两类:无限循环小数和无限不循环小数。无限不循环小数不能化分数,这在中学将会得...

weixin_34268753的博客 197

【C++】分数运算

C++实现部分分数运算,封装成类

qq_47750131的博客 947

小数分数(C++)

【问题描述】 任何小数都能表示成分数的形式,对于給定的小数,编写程序其化为最简分数输出,小数包括简单小数和循环小数。 【输入形式】 第一行是一个整数N,表示有多少组数据。 每组数据只有一个纯小数,也就是整数部分为0。小数的位数不超过9位,循环部分用()括起来。 【输出形式】 对每一个对应的小数化成最简分数后输出,占一行 【样例输入】 3 0.(4) 0.5 0.32(692307) 【样例输出】 ...

LG.田猿的博客 4987

用micro:bit制作发光蜘蛛:物理计算与STEAM教育入门实践

物理计算是连接数字世界与物理世界的核心技术,它通过微控制器(如micro:bit)和传感器、执行器(如LED)的协同,让程序逻辑得以在实体设备中运行。其核心原理在于利用通用输入输出(GPIO)引脚,根据程序指令控制电流通断,从而驱动外部元件。这项技术的价值在于将抽象的编程思维化为直观的物理交互,极大地降低了硬件编程和创客实践的门槛。在STEAM教育和创客项目中,物理计算是培养计算思维和工程实践能力的理想载体,常用于制作智能装饰、互动玩具和物联网原型。本文以制作一个会发光的蜘蛛为例,详细展示了如何通过图形化

weixin_30667649的博客 443
上一篇: ACM:&nbsp;贪心题&nbsp;poj&nbsp;1083
下一篇: ACM:&nbsp;DP+floyd&nbsp;动态规划题&nbsp;poj&nbsp;117…
Smile_Benson
博客等级 码龄15年 9粉丝 354原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值