zoukankan      html  css  js  c++  java
  • nyoj131 小数相加 循环小时转换分数

     

    小数相加

    时间限制:1000 ms  |  内存限制:65535 KB
    难度:4
     
    描述

    给你两个个小数,你能计算出它们的和是多少吗?

    你肯定会说,so easy。

    可是,如果这些小数中有的是无限循环小数呢?

    无限循环小数一般有三部分,整数部分,小数不循环部分,和小数循环部分。
    比如:
    1.2(34)的三部分分别为1 2 34.
    2.(04)的整数部分为2,小数不循环部分不存在,小数循环部分为04
    2.4的整数部分为2,小数不循环部分为4,小数循环部分不存在
    一般小数循环部分在小数的最后。
    现在,请计算两个无限循环小数的和

     

     
    输入
    第一行输入一个整数N,表示有N行测试数据(1<=N<=100)
    第二行输入六个字符串S1,T1,R1,S2,T2,R2,分别别示第一个和第二个循环小数的整数部分,小数不循环部分与小数部分。(如果该部分不存在,则输入$)
    整数部分,小数不循环部分,循环部分长度皆不超过10位。
    输入的各部分皆为正数。
    输出
    输出两个数的和,输出结果请转换成最简分数(不要写成带分数的形式)。(如果是整数则直接输出)
    样例输入
    3
    1 $ 3 2 $ 3
    0 1 3 0 $ 6
    2 03 $ 2 4 $
    样例输出
    11/3
    4/5
    443/100
    
    代码:
    #include <iostream>
    #include<algorithm>
    #include<cstdio>
    #include<cstring>
    using namespace std;
    long long  turn(long long x,long long y)
    {
        while(y!=0)
        {
           int r=x%y;
           x=y;
           y=r;
        }
        return x;
    }
    long long ten(int x)
    {
        long long sum=1;
        while(x)
        {
            sum*=10;
            x--;
        }
        return sum;
    }
    int main()
    {
        int n,x,y;
        long long a,b,c,a1,b1,c1,w;
        long long u,d,u1,d1;
        char char1[21],char2[21],char3[21],char4[21],char5[21],char6[21];
        scanf("%d",&n);
        while(n--)
        {
            scanf("%s %s %s %s %s %s",char1,char2,char3,char4,char5,char6);
            x=strlen(char2);
            y=strlen(char3);
            if(char2[0]=='$'&&char3[0]!='$')
            {
                c=atoll(char3);
    //字符串取long long 型,字符串取long型为atol,字符串取浮点型atof,字符串取整型atoi
                u=c;
                d=(ten(y)-1);
                w=turn(u,d);
                u/=w;d/=w;
            }
            else if(char2[0]!='$'&&char3[0]!='$')
            {
                b=atoll(char2); c=atoll(char3);
                u=(b*(ten(y)-1)+c);
                d=ten(x)*(ten(y)-1);
                w=turn(u,d);
                u/=w;d/=w;
            }
            else if(char2[0]!='$'&&char3[0]=='$')
            {
                u=atoll(char2);
                d=ten(x);
            }
            else
            {
                u=0;d=1;
            }
    
            x=strlen(char5);
            y=strlen(char6);
            if(char5[0]=='$'&&char6[0]!='$')
            {
                c1=atoll(char6);u1=c1;
                d1=(ten(y)-1);
                w=turn(u1,d1);
                u1/=w;d1/=w;
            }
            else if(char5[0]!='$'&&char6[0]!='$')
            {
                b1=atoll(char5);c1=atoll(char6);
                u1=(b1*(ten(y)-1)+c1);
                d1=ten(x)*(ten(y)-1);
                w=turn(u1,d1);
                u1/=w;d1/=w;
            }
            else if(char5[0]!='$'&&char6[0]=='$')
            {
                u1=atoll(char5);
                d1=ten(x);
            }
            else
            {
                u1=0;d1=1;
            }
    
            if(char1[0]=='$') a=0;
            else a=atoll(char1);
    
            if(char4[0]=='$') a1=0;
            else a1=atoll(char4);
    
            u=u*d1+u1*d;
            d*=d1;
            w=turn(u,d);
            u/=w;d/=w;
            
            u=(a+a1)*d+u;
            w=turn(u,d);
            u/=w;d/=w;
            
            if(d!=1)
            printf("%lld/%lld\n",u,d);
            else
            printf("%lld\n",u);
        }
        return 0;
    }

    代码COPY惊涛的,这个题主要学习,循环小数转换分数:

    如0.33 转换应是 33/(10^2-1)就是33/99=1/3; 0.(abc) = abc/(10^3-1); 0.12(abc)=0.12+abc/(10^3-1)*100

    还有就是求 最大公约数:

    long long  turn(long long x,long long y)  

    • {  
    •     while(y!=0)  
    •     {  
    •        int r=x%y;  
    •        x=y;  
    •        y=r;  
    •     }  
    •     return x;  
    • }  
  • 相关阅读:
    SQL执行效率1
    php经典算法(转载)
    linux自用命令
    vim基本命令
    xampp安装
    BUU-rsa
    z3约束器学习笔记
    面试前夕oi挣扎式复习
    bss上的格式化字符串漏洞
    一、汇编
  • 原文地址:https://www.cnblogs.com/zibuyu/p/3111149.html
Copyright © 2011-2022 走看看