L1-009 N个数求和 (20分)

这题让我思考了蛮多,首先,我对所谓,构思程序内容,代码实现其实不难,即编程应该化更多的时间构思和设计要写什么,而不是直接上手打代码,代码实现只是其中一个不那么至关重要的点;
其二,对题目本身应该增加关注,需要注意并分析数据大小,而非莽(我在这吃了大亏(逃))比如这题需关注到,如果使用将所有的数据通分或者说相乘得到分母的方法,极其不理智,因为,假如说有100个数,夸张的算的话100!(阶乘)很大的一个数(9.3326215443944152681699238856267e+157‬)而int远远不够,longlong亦然;(等等double也许可以?4.94065645841246544E-324 到 1.797693E+308)
其三,函数很有必要;

#include<stdio.h>

int gcd(int a,int b)
{
	int rema;//remainder
	while(b!=0)
	{
		rema=a%b;
		a=b;
		b=rema; 
	}
	return a;
}

int main(void)
{
    int n,i=0,a[105]={0},b[105]={0};
    //intput and process figures;
    scanf("%d",&n);
    scanf("%d/%d",&a[i],&b[i]);         
    int nume=a[i],deno=b[i],div=0;
    for(i=1;i<n;i++)
    {
        scanf("%d/%d",&a[i],&b[i]);
        nume = nume * b[i] + a[i] * deno;
        deno = b[i] * deno;         //"numerator/denominator" is called a fraction, integer is relative;
        div = gcd(nume,deno);
        deno /= div,nume /= div;
    }
    if(nume%deno==0)printf("%d", nume/deno);
    else 
    {
        if(nume>deno){
            printf("%d %d/%d",nume/deno, nume-nume/deno*deno, deno);

        }
        else printf("%d/%d", nume, deno);
    }
    //output
}
发布了10 篇原创文章 · 获赞 4 · 访问量 270

猜你喜欢

转载自blog.csdn.net/dylan_sjc/article/details/103978557
今日推荐