C语言实现L1-009N个数求和-创新互联
                                            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元起,快前往官网查看详情吧
当前名称:C语言实现L1-009N个数求和-创新互联
地址分享:http://www.scyingshan.cn/article/dcejis.html

 建站
建站
 咨询
咨询 售后
售后
 建站咨询
建站咨询 
 