题目背景

non习惯将分数化成小数,但在数学中要以分数形式写,不能化成小数

因此non找到了会编程的你,帮助他将小数化回分数

题目描述

给出一个小数,将它化成假分数的形式

小数的类型有2种:(不考虑无限不循环小数)

普通小数

循环小数(会给出循环节)

(循环节用( )表示)

输入输出格式

输入格式:

一个小数n

输出格式:

输出这个小数n转化成最简分数的形式

输入输出样例

输入样例#1: 复制

1.32
输出样例#1: 复制

33/25
输入样例#2: 复制

1.(3)
输出样例#2: 复制

4/3
输入样例#3: 复制

1.0
输出样例#3: 复制

1/1

说明

输入小数的数据范围

0至1000

对于50%的数据保证没有循环节

对于20%的数据需要读入优化

思路:模拟即可。

#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
char s[];
int l,r,num,num1,num2,num3;
int gcd(int x,int y){
return x==?y:gcd(y%x,x);
}
int pow(int a,int b){
int s=;
for(int i=;i<=b;i++) s*=a;
return s;
}
void work1(){
int len=strlen(s),ans1,ans2;
for(int i=len-;i>=;i--){
if(s[i]>=''&&s[i]<=''&&(s[i+]==')'||r)){
num1+=pow(,r)*(s[i]-'');
r++;
}
if(s[i]>=''&&s[i]<=''&&(s[i+]=='('||l||s[i+]=='.')){
num2+=pow(,l)*(s[i]-'');
l++;
}
if(s[i]=='.'){ ans1=l;ans2=r; }
}
l=num1-num2;r=pow(,ans2)-pow(,ans1);
int GCD=gcd(l,r);
printf("%d/%d",l/GCD,r/GCD);
exit();
}
void work2(){
int len=strlen(s);
for(int i=len-;i>=;i--){
if(s[i]>=''&&s[i]<=''){
num3+=pow(,num)*(s[i]-'');
num++;
}
if(s[i]=='.') num1=num;
}
l=num3;r=pow(,num1);
int GCD=gcd(l,r);
printf("%d/%d",l/GCD,r/GCD);
exit();
}
int main(){
cin>>s;
int len=strlen(s);
for(int i=;i<len;i++)
if(s[i]=='('){ work1();break; }
work2();
}

最新文章

  1. 爬虫框架--webmagic
  2. 现代软件工程作业-- GitHub的学习
  3. __getattitem_ \__setattitem__\__delitem__
  4. 浅析Hadoop文件格式
  5. JSon_零基础_002_将List类型数组转换为JSon格式的对象字符串,返回给界面
  6. 开启xp_cmdshell
  7. 007 The Inheritance In JAVA
  8. 关于struts2的上传和下载
  9. html5音频和视频相关属性和方法
  10. 初始化rails上的compass项目
  11. IOS详解TableView——对话聊天布局的实现
  12. sqlserver-根据2张表的id更新其他列值
  13. JVM内存模型及垃圾回收的研究总结
  14. 运用SqlSugar框架+Axios写的增删查案例
  15. node.js学习4--------------------- 根据不同路径来响应内容,以及中文乱码的解决
  16. SpringData分页功能
  17. fatal error c1001 编译器中发生内部错误 OpenMesh6.3
  18. 洛谷p1067
  19. MP实战系列(十一)之封装方法详解(续一)
  20. (转载)Python 的 JPype 模块调用 Jar 包

热门文章

  1. Codeforces--630E--A rectangle(规律)
  2. Node.js安全清单
  3. Gym - 101981A The 2018 ICPC Asia Nanjing Regional Contest A.Adrien and Austin 简单博弈
  4. 通过JS制作一个简易数码时钟
  5. Redis(三)-Ubuntu下安装
  6. 知识总结1:debug命令汇总(一)
  7. Leetcode0024--Swap Nodes in Pairs 链表配对交换
  8. php加密方法有哪些
  9. SQL server基本语法
  10. Deutsch lernen (03)