/**
* 将两个数同时除以它们的最大公约数,将得到的商以数组形式返回。
*
* @param num
* @param den
* @return
*/
public static long[] getSub(long num, long den) {
long maxCommonDivisor = getMaxCommonDivisor(num, den);
long numret = num / maxCommonDivisor;
long denret = den / maxCommonDivisor;
return new long[]{numret, denret};
}
/**
* 获取两个数的最大公约数。
*
* @param n1
* @param n2
* @return
*/
public static long getMaxCommonDivisor(long n1, long n2) {
long result = 1;
long maxer = Math.min(n1, n2);
for (int i = 1; i < maxer; i++) {
if (0==n1%i && 0==n2%i) {
result = i;
}
}
class He
{
public static void main(String[] args)
{
fenshu();
}
public static void fenshu()
{
double x=2.0;
double y=1.0;
double r;
double[]fz=new double[5];//创建长度为5的分子数组
double[]fm=new double[5];//创建长度为5的分母数组
for (int i=0;i<5 ;i++ )//给前5个分数的分子、分母赋值
{
if(i==0)
{
fz[i]=x;
fm[i]=y;
}
else if(i!=0)
{
r=y;
y=x;
x=y+r;
fz[i]=x;
fm[i]=y;
}
}
double Fm=fm[0]*fm[1]*fm[2]*fm[3]*fm[4];//所有分数的分母的乘积做为分数相加后的分母。
double Fz=(fz[0]*fm[1]*fm[2]*fm[3]*fm[4])+(fz[1]*fm[0]*fm[2]*fm[3]*fm[4])+
(fz[2]*fm[1]*fm[0]*fm[3]*fm[4])+(fz[3]*fm[0]*fm[2]*fm[1]*fm[4])+
(fz[4]*fm[1]*fm[2]*fm[3]*fm[0]);//所有分数的分子和
double min = Math.min(Fz, Fm);//在分子分母中选择较小的作为寻找公约数遍历的对象
for(int t=2;t<=min;t++)
{
if((Fz%t==0)&&(Fm%t==0))//如果该分数不是最简分数,即分子分母存在公约数
//则分子分母同时除以公约数,化简该分数。
{
Fz = Fz/t;
Fm = Fm/t;
}
}
System.out.println("分数和::"+Fz+"/"+Fm);
}
}
/*
观察该分数序列可以得到:第二个分数的分母为第一个分数的分子,而第二个分数的分子为第一个分数分子、分母的和;
于是定义一个临时对象r作为分子分母的变化的工具
由于二十个分数的分母、分子的公约数和公倍数实在太麻烦,就以前5个为例吧
*/ 作者: 韦念欣 时间: 2012-7-22 03:04
正确答案:
public class Demo
{
public static void main(String[] args)
{
System.out.println("sum="+Sum(20));
}
public static double Sum(int n){
double a=2.0, b=1.0, tmp;
double sum = a/b;
for (int i=1; i<n; i++){
tmp = a;
a += b;
b = tmp;
sum += (a/b);
System.out.println(a+"/"+b+"="+a/b);
}
return sum;
}
}作者: 郭凯敏 时间: 2012-7-22 05:36 本帖最后由 郭凯敏 于 2012-7-22 05:38 编辑
韦念欣 发表于 2012-7-22 03:04
正确答案:
public class Demo
{
老大我觉得你那个有点脱离需求,所以改了一下,把你的简化修改了下....没啥技术,还是用的你的思路.....你加分我不会介意的,不加分我会介意的.....
public class Demo
{
public static void main(String[] args)
{
Demo.Sum(20);
}
public static void Sum(int n){
int a=2, b=1, tmp;
int sumA=a;
int sumB=b;
for (int i=1; i<n; i++){
tmp = a;
a += b;
b = tmp;
sumA+=a;
sumB+=b;
String str=new String(sumA+"/"+sumB);
System.out.println(str);
}
}
}作者: 张世威 时间: 2012-7-22 15:38