关于分数的加法

yqw945 2008-02-05 07:44:02
感兴趣的朋友帮忙提示一下,怎样编程实现分数的加法,比如 计算5/3+8/5+13/8+21/13·····前十项的和(是否是要按某规律做?)
非常感谢
...全文
557 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
追忆 2008-03-09
  • 打赏
  • 举报
回复
#include<iostream>
using namespace std;
int main()
{
float a=5,b=3;
float temp;
float result;
for(int i=0;i!=10;++i)
{
result=a/b;
temp=a+b;
b=a;
}
cout<<result<<endl;
return 0;
}
行了
光跃 2008-02-15
  • 打赏
  • 举报
回复
第一项是int t1 = 5/3,
第二项是int t2 = 1/t1 + 1 ......
woshinanren 2008-02-15
  • 打赏
  • 举报
回复
输入和输出的要求啊 格式都没得 怎么做啊?
大前置 2008-02-12
  • 打赏
  • 举报
回复
我自己做的类 可以实现分数相加 输出double值 没有判断输入代码 自己输入一定要正确 例:1/2+1/3+2/5 回车结束输入
#include <iostream>
#include <fstream>
#include <istream>

using namespace std;

class Fraction //建立 分数 类
{
friend istream& operator >>(istream &ins,Fraction &fra);// 重载C++输入符号 >>, 能够输入分数
friend ostream& operator <<(ostream &outs,Fraction &fra);// 重载C++输出符号 <<, 能够输出分数 double值
friend Fraction operator +(Fraction &fra1,Fraction &fra2); // 重载C++相加符号 +, 能够相加分数 返回分数值
int GetGreatestCommonDivisor(int num1,int num2);//最大公约数
public:
Fraction(int x=0,int y=1) //构造函数 赋值0
{
molecule=x;
denominator=y;
}
private:
int molecule;//分子
int denominator;//分母
};

int GetGreatestCommonDivisor(int num1,int num2)
{ //求两个数最大公约数
int temp=1;
while(num1%2==0&&num2%2==0)
{
temp *=2;
num1 /=2;
num2 /=2;
}
while(num1%3==0&&num2%3==0)
{
temp *=3;
num1 /=3;
num2 /=3;
}
while(num1%5==0&&num2%5==0)
{
temp *=5;
num1 /=5;
num2 /=5;
}
while(num1%7==0&&num2%7==0)
{
temp *=7;
num1 /=7;
num2 /=7;
}
return temp;
}

istream& operator >>(istream &ins,Fraction &fra)
{ // 重载C++输入符号 >>, 能够输入分数
int a,b;
char c;
ins>>a>>c>>b;
if(c=='/'&&b!=0)
{
fra.denominator=b;
fra.molecule=a;
}
return ins;
}

ostream& operator <<(ostream &outs,Fraction &fra)
{ // 重载C++输出符号 <<, 能够输出分数 double值
cout<<((double)fra.molecule)/((double)fra.denominator);
return outs;
}

Fraction operator +(Fraction &fra1,Fraction &fra2)
{
int m_temp,d_temp,gcd=1; // 重载C++相加符号 +, 能够相加分数 返回分数值
Fraction temp;
m_temp=fra1.molecule*fra2.denominator+fra2.molecule*fra1.denominator;
d_temp=fra1.denominator*fra2.denominator;
gcd=GetGreatestCommonDivisor(fra1.denominator,fra2.denominator);//求最大公约数
temp.molecule=m_temp/gcd;
temp.denominator=d_temp/gcd;
return temp;
}

int main()
{
cout<<"Enter:";
Fraction fra,sumFra;
char ch;
cin>>fra;
sumFra=fra;
ch=getchar();
while(ch!='\n') //回车结束输入
{
cin>>fra;
sumFra =sumFra+fra;
ch=getchar();
}
cout<<"值为:"<<sumFra;
getchar();
return 1;
}
a3950410 2008-02-10
  • 打赏
  • 举报
回复
格式不正确啊,自己再改改
a3950410 2008-02-10
  • 打赏
  • 举报
回复
#include <stdio.h>

void main()
{
unsigned int a , b , c , d , e , f;
printf("请输入算式:");
scanf("%d/%d+%d/%d",&a,&b,&c,&d);
e = a * d + c * b;
f = b * d ;

a = e ;
b = f ;

while(a != b )
{
while(a > b )
a -= b;
while(b > a )
b -= a;
}

printf("结果是:%d/%d",e / a , f / a);
}
musicfans 2008-02-09
  • 打赏
  • 举报
回复
看看我的代码。。。

#include<iostream>
using namespace std;

int main()
{
int n=10,a,b;
char c;
float value,sum=0.0f;

while(true){
cin>>a>>c>>b; //由于无法直接输入分数。采用一个字符变量c接受输入的'/'。
if(c!='/')
{
cout<<"Input a Wrong value!"<<endl;
cout<<"Input again:"<<endl;
}
else
break;
}
value=a*1.0f/b; //计算出输入的分数值的大小,*1.0f是为了将输入的整数转成小数。
for(int i=0;i<n;i++) //n表示你要求和的项数,其值可在初始化语句中定义。
{
sum+=value; //对每一项的分数值求和。
value=1+1.0f/value; //根据规律求出第一项以后的各项的值,并循环至sum供其加入。
}
cout<<sum<<endl;
}
a3950410 2008-02-09
  • 打赏
  • 举报
回复
程序如下, 如果有其他要求,自己可以修改下。

#include <stdio.h>

void main()
{
unsigned int a , b , c , d , e , f;
printf("请输入算式:");
scanf("%d/%d+%d/%d",&a,&b,&c,&d);
e = a * d + c * b;
f = b * d ;

a = e ;
b = f ;

while(a != b )
{
while(a > b )
a -= b;
while(b > a )
b -= a;
}

printf("结果是:%d/%d",e / a , f / a);
}
a3950410 2008-02-09
  • 打赏
  • 举报
回复
如果我要算 1/2+2/4,我可以这样算,用1*4+2*2,看明白了吗,然后算出来的结果以他们两个分数的分母为准。这样,然后我们再去找他们的最大公因数,约分,化成最简分数,这样再输出就行了。

这一段修改下

如果我要算 1/2+2/4,我可以这样算,用1*4+2*2,看明白了吗,这就是结果的分子。然后算出来的结果以他们两个分数的分母的积为准。这样,然后我们再去找他们的最大公因数,约分,化成最简分数,这样再输出就行了。
a3950410 2008-02-09
  • 打赏
  • 举报
回复
不懂得问我。
a3950410 2008-02-09
  • 打赏
  • 举报
回复
看我的!

我刚在吃爆米花,现在帮你说。
我是六年级的, 我们这个学期刚学了分数,可以这样,我说思路,如果我有空的话帮你做出来。

让用户先输入分数,然后通分进行加法来算。我们这个学期做的练习题多了, 我总结出了一个经验。

如果我要算 1/2+2/4,我可以这样算,用1*4+2*2,看明白了吗,然后算出来的结果以他们两个分数的分母为准。这样,然后我们再去找他们的最大公因数,约分,化成最简分数,这样再输出就行了。

我的QQ235931068
gccli 2008-02-07
  • 打赏
  • 举报
回复
1,1,2,3,5,8,13,21……
这不就是著名的斐波拉契数列吗
斐波拉契(Fibonacci)数列来源于兔子问题,它有一个递推关系,
f(1)=1
f(2)=1
f(n)=f(n-1)+f(n-2),其中n>=2 =2

每一个分数就是f(n)/f(n-1) ,这就是所谓的规律
arong1234 2008-02-07
  • 打赏
  • 举报
回复
程序设计还是得来自生活,如果时随机得分数求和,还是要用通分母求和得小学数学方法,没有其他好招
至于你得式子,显然时一个有规律得求和式,应该花点功夫求出通项

5/3+8/5+13/8+21/13·····

很显然,分子分母都是菲波那锲亚数列得一个部分,没有简单得通项公式吧?!

所以,既然只要前10项,手工算最经济
zeloas 2008-02-06
  • 打赏
  • 举报
回复
a/b不是1,这是因为a,b的类型不是int是double
yqw945 2008-02-06
  • 打赏
  • 举报
回复
HelloDan 写的这一句是不是有问题 sum=sum+a/b; 5/3算的结果是1,照这样5/3+8/5 最后结果是2????
yqw945 2008-02-06
  • 打赏
  • 举报
回复
麻烦大家帮忙看看
Smelly_BB 2008-02-05
  • 打赏
  • 举报
回复
还是HelloDan写的对,看马虎了
新手还是太浮燥了^_^
cnzdgs 2008-02-05
  • 打赏
  • 举报
回复
用两个整数分别储存分子和分母,通分相加。
Smelly_BB 2008-02-05
  • 打赏
  • 举报
回复
SORRY,上面的count<2应改为count<10
Smelly_BB 2008-02-05
  • 打赏
  • 举报
回复
这段代码的计算结果应该是对的,呵呵
#include <iostream>
using namespace std;
int main()
{
int count;
double i = 5, j = 3, sum;//初使化分母i=5,分子j=3
sum = i / j;
for (count = 1; count < 2; count ++)
{
sum += (i + j * count) / i;//数列和公式
}
cout << sum << endl;
return 0;
}
加载更多回复(1)

64,649

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧