华为OJ(将真分数分解为埃及分数)
2015-08-16 15:00
387 查看
题目:将真分数分解为埃及分数
若真分数的分子a能整除分母b,则真分数经过化简就可以得到埃及分数,若真分数的分子不能整除分母,则可以从原来的分数中分解出一个分母为b/a+1的埃及分数。用这种方法将剩余部分反复分解,最后可得到结果。
网上大多都是这种解法,可能就是一个规律题,前面还好懂,对a=3情况的单独处理不是太懂,下面是代码:
描述 | 分子为1的分数称为埃及分数。现输入一个真分数(分子比分母小的分数,叫做真分数),请将该分数分解为埃及分数。如:8/11 = 1/2+1/5+1/55+1/110。 接口说明 /* 功能: 将分数分解为埃及分数序列 输入参数: String pcRealFraction:真分数(格式“8/11”) 返回值: String pcEgpytFraction:分解后的埃及分数序列(格式“1/2+1/5+1/55+1/100”) */ public static String ConvertRealFractToEgpytFract(String pcRealFraction) { return null; } |
---|---|
知识点 | 字符串 |
运行时间限制 | 10M |
内存限制 | 128 |
输入 | 输入一个真分数,String型 |
输出 | 输出分解后的string |
样例输入 | 8/11 |
样例输出 | 1/2+1/5+1/55+1/110 |
网上大多都是这种解法,可能就是一个规律题,前面还好懂,对a=3情况的单独处理不是太懂,下面是代码:
#include<iostream> #include<string> using namespace std; int main() { string s,sn,sd; int a,b,c; cin>>s; size_t index=s.find_first_of('/'); sn=s.substr(0,index); sd=s.substr(index+1,s.size()-index-1); a=atoi(sn.c_str()); b=atoi(sd.c_str()); while(1) { if(b%a) c=b/a+1; else { c=b/a; a=1; } if(a==1) { cout<<"1/"<<c; break; } else { cout<<"1/"<<c<<"+"; } a=a*c-b; b=b*c; if(a==3) { cout<<"1/"<<b/2<<"+"<<"1/"<<b; break; } } //system("pause"); return 0; }
相关文章推荐
- 架构设计中的6种常见安全误区
- iOS调用系统通讯录获取姓名电话号码(转)
- ( 笔试题)只出现一次的数
- 三 HDU 2097
- jQuery基础----17jQuery遍历之向下遍历
- 一步步优化JVM五:优化延迟或者响应时间(1)
- 上传文件被nginx全部缓存的问题
- Uva 10341 Solve It(数论)
- jQuery基础----16jQuery CSS-jQuery盒子模型
- 多线程编程的资源争用问题
- 无废话MVC入门教程二[第一个小Demo]
- 坐标与坐标变换
- 宁波麒麟贸易集团立志打造创意文化产业领域的世界级企业
- jQuery基础----15jQuery CSS-jQuery CSS方法
- 世界最著名的密码破解软件集合
- openstack通过Network Namespace和iptables实现租户私有网络互访和L3路由功能
- 通俗易懂的语言描述JavaScript原型
- switchhosts(本地域名解析)小工具使用
- jQuery基础----14jQuery HTML-删除元素
- SpringMVC+Mybatis集成开发,环境搭建。