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://cdiso.cn/article/dcejis.html

其他资讯