重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
PTA | 程序设计类实验辅助教学平台
创新互联服务项目包括太湖网站建设、太湖网站制作、太湖网页制作以及太湖网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,太湖网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到太湖省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!我们先看一下这道题
我们的先创建变量来一个个接受数据,然后我们分为三步:
1.将输入的数据全部进行通分
long long int sum_a = 0;
long long int sum_b = 1;
long long int a, b = 0;
scanf("%lld/%lld", &a, &b);
sum_a *= b;
sum_a += sum_b * a;
sum_b *= b;
我们将输入的分数的分子看成a,分母看成b
2.写一个函数求出分子和分母的大公约数,进行化简。
求大公约数,我们用辗转相除法,可以用两种方法实现
(1)非递归的方式:代码如下
long long int gcd(long long int a, long long int b)
{
int t = 0;
while (t=a%b)
{
a = b;
b = t;
}
return b;
}
可以参考我往期的博客辗转相除法求两个数的大公约数_GO1ING的博客-博客
(2)用递归的方法:这样可以节省代码量,但是思路是一样
long long int gcd(long long int a, long long int b)
{
return b ? gcd(b, a % b) : a;
}
3.按要求进行输出。
在最后我们要注意题目的输出要求,也是本题的易错点。
if (sum_a % sum_b == 0)
{
printf("%lld", sum_a / sum_b);
}
else if (sum_a< sum_b)
{
printf("%lld/%lld", sum_a, sum_b);
}
else
printf("%lld %lld/%lld", sum_a / sum_b, sum_a%sum_b, sum_b);
return 0;
最后我们是完整代码:
long long int gcd(long long int a, long long int b)
{
return b ? gcd(b, a % b) : a;
}
int main()
{
long long int t = 0;
long long int sum_a = 0;
long long int sum_b = 1;
long long int n = 0;
scanf("%d", &n);
for (int i = 0; i< n; i++)
{
long long int a, b = 0;
scanf("%lld/%lld", &a, &b);
sum_a *= b;
sum_a += sum_b * a;
sum_b *= b;
t = gcd(sum_a, sum_b);
sum_a /= t;
sum_b /= t;
}
if (sum_a % sum_b == 0)
{
printf("%lld", sum_a / sum_b);
}
else if (sum_a< sum_b)
{
printf("%lld/%lld", sum_a, sum_b);
}
else
printf("%lld %lld/%lld", sum_a / sum_b, sum_a%sum_b, sum_b);
return 0;
}
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧