分数->小数

该博客探讨如何将分数表示为小数,特别是处理无限重复小数的情况。通过一个C语言实现的示例,解释了如何计算分数的整数部分、小数部分以及确定循环节的开始。当找到相同的余数时,标记循环节并将其括在括号内。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一:问题描述

Description: As we know, a rational number is a number that can be represented as y/x where x and y are integers and y is not equal to zero. On the hand, a rational number could also be represented in decimal form and the resulting decimal is a finite decimal or an infinite repeating decimal. Now, you are given the x and y , please return the decimal form of y/x in string format, and enclose the repeating part for the infinite repeating decimal in parentheses, for example:
X=1, Y=2, return ‘0.5’
X=2, Y=3, return ‘0.(6)’
X=7, Y=15, return ‘0.4(6)’

二:斟酌题意:

其实就是将 一个 分数用 小数表示,如果是无限循环小数,那么用括号将循环节 括起来。事例已经说明这点。

三:思路以及方法

不妨先假设分子为26,分母为23。根据此实例加以分析。
我们先计算整数部分 pre = 26/23 ,小数部分 为 分子 numerator = 26 % 23 =3,分母denominator为 23。我们循环计算余数 remainder[i] = numerator *10 % denominator ,如果发现 存在2个相同的余数numerator,那么就开始出现 循环节。意味着循环节从此开始,到再次出现为止。
当然,我们要先计算 从小数点到 开始出现循环节的位置的部分。思路很简单,只要余数不是numerator,就一直计算一位同时重新计算余数,直至出现余数为numerator.

四:C代码如下

/*
1.运行环境:windows 7 + 32位系统 + vs2013
2.无差错控制,无安全检查,无特殊处理。
3.带刺的银杏 2015.05.17夜 于 苏州 
*/
#include <stdio.h>
#define MAX_denomintor 3000  // 分母最大值
int main(void)
{
    int numerator, denominator, loop_start,point_to_loop_numerator;     //分别为 分子,分母,循环节开始时的余数,小数点到出现循环节的计算
    int remainder[MAX_denomintor],flag_loop; //remainder为余数数组,flag_loop=0/10为有限循环,1为无线循环小数。

    printf("please input numerator and denominator:");
    scanf("%d%d", &numerator, &denominator);
    if(denominator > MAX_denomintor - 1 ) //如果分母过大,则终止程序
    {
        printf("the denomintor is too big !!");
        return -1;      
    }

    printf("%d.",numerator/denominator); //先输出整数部分
    numerator %= denominator; 
    point_to_loop_numerator = numerator;

    remainder[0] = 1;     //remainder[numerator]=1代表出现numerator这个余数
    remainder[numerator] = 1;
    numerator = numerator*10%denominator;

    for(;remainder[numerator] != 1;remainder[numerator] = 1,numerator = numerator*10%denominator);         //循环求 余数
    flag_loop = (numerator == 0) ? 0 : 1;        //判断是否为循环小数

    while (point_to_loop_numerator != numerator) //计算小数点到开始循环之间的小数部分
    {
        printf("%d",point_to_loop_numerator*10/denominator);
        point_to_loop_numerator = point_to_loop_numerator*10%denominator;
    }

    if(flag_loop == 0)
    {
        return;
    }

     printf("("); //准备打印循环节

        loop_start = numerator;      
        do 
        {
            printf("%d", numerator*10/denominator);
            numerator = numerator*10%denominator;
        } while (numerator != loop_start);
        printf(")\n");

    return 0;
}

五.小结

整体较容易,思路在手,一切都有。

内容概要:本文详细介绍了水中有限长加肋圆柱壳体振动和声辐射的近似解析解,并提供了完整的Python实现。文中首先阐述了问题背景,即加肋圆柱壳体作为水下航行器的主要结构形式,肋骨的作用被简化为只有法向力。接着,通过一系列关键方程(如模态振动速度方程、壳体机械阻抗、特征矩阵元素等),推导出加肋圆柱壳体的振动和声辐射特性。Python代码部分实现了这些理论,包括定义`CylindricalShell`类来封装所有计算功能,如初始化参数、机械阻抗、辐射阻抗、肋骨阻抗、模态速度、辐射功率和辐射效率的计算。此外,还扩展了带刚性圆柱障板的圆柱壳体类`CylindricalShellWithBaffle`,并引入了集中力激励、简支边界条件和低频段计算的内容。最后,通过具体示例展示了如何创建壳体对象、设置参数、计算频率响应以及绘制结果图表,验证了加肋对辐射声功率和声辐射效率的影响。 适合人群:具备一定编程基础和声学基础知识的研究人员、工程师,特别是从事水下声学、船舶工程和振动分析领域的专业人员。 使用场景及目标:①通过代码实现和理论推导,深入理解加肋圆柱壳体的振动和声辐射特性;②分析肋骨对壳体声学性能的影响,优化结构设计;③利用Python代码进行数值模拟,评估不同参数配置下的声辐射效率和功率;④为实际工程项目提供理论支持和技术参考。 其他说明:本文不仅提供了详细的数学推导和Python代码实现,还讨论了实际应用中的注意事项,如参数调整、高频模态考虑、肋骨模型细化和数值稳定性处理。建议读者结合实际需求,灵活运用文中提供的理论和代码,进行更深入的研究和实践。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值