在C ++中,当我计算2/3,它将输出十进制值,我怎么能刚刚得到的原始格式(IEG 2/3),而不是0.66666667
谢谢
在C ++中,当我计算2/3,它将输出十进制值,我怎么能刚刚得到的原始格式(IEG 2/3),而不是0.66666667
谢谢
你不能。 您需要编写一个专用于保存有理数(即分数)类。 或者只是使用升压有理数库 。
如果我理解正确的话,你有一个浮点数(一个float
或double
类型的变量),以及你想输出该值作为一小部分。
如果是这样的话,则需要进一步的叙述你的问题:
bestappr(x, A)
其中x你的投入,你想尝试的最大分母。 bestappr会给你的分数最接近x分母仍然是小于A。 写你自己的Rational类来计算划分
class Rational
{
public:
int numerator, denominator;
Rational(int num, int den=1){
numerator = num;
denominator=den;
}
Rational(Rational other){
numerator = other.numerator;
denominator = other.denominator;
}
double operator / (int divisor){
denominator *= divisor;
simplificate();
return getrealformat();
}
Rational& operator / (int divisor){
denominator *= divisor;
simplificate();
return this;
}
Rational& operator / (Rational &divisor){
numerator *= divisor.numerator;
denominator *= divisor.denominator;
simplificate();
return this;
}
double operator / (int divisor){
denominator *= divisor;
simplificate();
return getrealformat();
}
double getrealformat(){
return numerator/denominator;
}
simplificate(){
int commondivisor = 1;
for(int i=2;i<=min(abs(numerator), abs(denominator));i++)
if( numerator%i == 0 && denominator%i == 0 )
commondivisor = i;
numerator /= commondivisor;
denominator /= commondivisor;
}
};
使用
Rational r1(45), r2(90), r3=r1/r2;
cout<<r3.numerator<<'/'<<r3.denominator;
cout<<r3.getrealformat();
我怎么能刚刚得到的原始格式(IEG 2/3),而不是0.66666667
只有通过包装类似的大困难GMP库自定义输出的运营商。 下面是多一点的GMP:
什么是GMP?
GMP是高精度计算一个免费的图书馆,上有符号整数,有理数操作,和浮点数。 没有实际的限制除非在机器的可用内存GMP运行于隐含的那些精度。 GMP具有丰富的功能集和功能有一个普通接口。
对GMP的主要目标应用是密码学应用和研究,互联网安全应用,代数系统,计算代数的研究,等等。
GMP是经过精心设计成尽可能快,无论是小的操作数和巨大的操作数。 速度是通过使用fullwords为基本算术类型来实现,通过使用快速算法,以用于大量CPU的最常见的内环高度优化汇编代码,并通过一般的强调速度。
GMP是比任何其他BIGNUM库更快。 对GMP的优点与操作数大小的许多操作会增加,因为GMP采用渐进更快的算法。
第一个GMP释放在1991年使其不断开发和维护,用新的版本大约一年一次。
你必须把它们存储在某种Fraction类的有两个整数字段。 当然,你必须使用它的输出之前,以简化的分数。
你可以开发自己的类或使用一些图书馆,像这样一个精确的数学: CLN -类库号
这是一般不可能:浮点数并不精确,不保留足够的信息来完全重构的一小部分。
你可以,但是,写启发式找到“最佳”近似,由此与小分子和分母的馏分被优选的,因为是具有几乎相同的值作为浮点数馏分的函数。
如果您在代码的完全控制的时候,奥利奇的想法是更好的:不要扔掉摆在首位的信息。
您可以将所有分数的分子和分母为intergers。 整型数据的二进制精确表示。
为了简化工作,我建议你坚持使用已知的分母如果可能的话。
我正在与其中的级分被限制为2的幂的分母的应用加工,或利用3(用于三分之二)。
余转换为使用近似(四舍五入到最接近的1.0 / 24.0)这些级分。
如果没有一定的限制,寻找分母可以是一个相当繁琐且占用大量的执行时间。
我是初学者,这样一来,我使用可能不是一个正确的方法
#include <iostream>
using namespace std;
int main ()
{
double a;
double b;
double c;
cout << "first number: ";
cin >> a;
cout << "second number: ";
cin >> b;
c = a/b;
cout << "result is: " << c << endl;
if (b != 0) {
if (a > 0) {
if (c - (int)c > 0 && c - (int)c < 1)
cout << "fraction: " << a << "/" << b;
} else {
if (c - (int)c < 0 && c - (int)c < 1)
cout << "fraction: " << a << "/" << b;
}
}
return 0;
}
除以他们引以为豪的这两个数字可能会有所帮助。
#include <iostream>
using namespace std;
int main() {
int a,b,q,r;
cin>>a>>b;//first number and second number
q = a/b;
r = a-q*b;
cout<<q<<" "<<r<<" "<<"/"<<" "<<b<<"\n";
return 0;
}
我刚刚得到商除以A / B则获得了由水性* B的余数。 打开如有suggetions。
使用最大公约数的概念。
如果我们与他们的数量的GCD划分的数字,我们得到those.example的最小可能值: -
#define si long long
int main() {
si int total=4;
si int count=2;
si int g= __gcd(count,total);
count/=g;
total/=g;
cout<<count<<"/"<<total<<endl;
}
for more reference check out this:-https://www.codechef.com/viewsolution/17873537
这是一个十进制数转换成分数的程序
#include<iostream>
using namespace std;
int main()
{
float num, origNum, rem = 1;
int den = 1, i, count=0, gcd=1;
cout << "Enter any float number to convert it into mixed fraction: ";
cin >> origNum;
num = origNum - static_cast<int>(origNum);
if (num > 0.1)
{
while ( (rem > 0.1) )
{
num = num * 10;
rem = num - static_cast<int>(num);
count++;
}
for (i = 1; i <= count; i++) // counter is for the calculation of denominator part of mixed fraction
{
den = den * 10;
}
for (i = 2; i <= num|| i<=rem; i++)
{
if( (static_cast<int>(num) % i == 0) && (den % i == 0) )
{
gcd = i;
}
}
cout << (static_cast<int>(origNum)) << " and " << (static_cast<int>(num))/gcd << "/" << den/gcd;
}
else
cout << (static_cast<int>(origNum));
return 0;
}