C++ ACM国际大学生编程竞赛亚洲地区D亨利
给定一个分数C++ ACM国际大学生编程竞赛亚洲地区D亨利,c++,algorithm,C++,Algorithm,给定一个分数a/b,其中a和b是正整数,a>子; 文件>>妈妈; 而(儿子!=1) { a=(int)(母亲/儿子)+1; 儿子=(儿子*a)-母亲; 妈妈=妈妈*a; } 你可能忘了用最大公约数(GCD)除以妈妈和儿子在每一步中。这可能会让某些示例永远运行或比预期的时间更长。检查这是否是问题所在。此外,为什么对son和mom使用double类型?分数的分子和外延应该是整数。如果它们可以是非常大的整数,只需使用无符号长整数即可或size\u t(在c++中是同义词)。double数据类型没有那么
a/b
,其中a
和b
是正整数,a
,选择最大的单位分数1/x_1
,以便1/x_1测试用例;
while(测试用例--)
{
文件>>子;
文件>>妈妈;
而(儿子!=1)
{
a=(int)(母亲/儿子)+1;
儿子=(儿子*a)-母亲;
妈妈=妈妈*a;
}
你可能忘了用最大公约数(GCD)除以妈妈和儿子在每一步中。这可能会让某些示例永远运行或比预期的时间更长。检查这是否是问题所在。此外,为什么对son
和mom
使用double
类型?分数的分子和外延应该是整数。如果它们可以是非常大的整数,只需使用无符号长整数即可
或size\u t
(在c++中是同义词)。double
数据类型没有那么多有效数字,因为size\u t
son
可能非常接近1
,但并不完全等于1
。您可能需要将其与一个小范围进行比较(如abs(son-1.0)<0.0001
或其他。使用调试器逐行检查代码。感谢您的建议,编辑它会有很大帮助感谢您的建议。处理GCD后,它解决了问题,我将更改变量类型谢谢
5/7 = 1/2 + 1/5 + 1/70
3
4 23
5 7
8 11
138
70
4070
#include <iostream>
#include <fstream>
using namespace std;
int testCase;
double a;
double son;
double mom;
int main()
{
ifstream file("input.txt");
file >> testCase;
while (testCase--)
{
file >> son;
file >> mom;
while (son != 1)
{
a = (int)(mom / son) + 1;
son = (son * a) - mom;
mom = mom * a;
}
cout << mom << endl;
}
file.close();
}