hdu 2006 求奇数的乘积(c语言)

hdu 2006 求奇数的乘积

link

题目描述

Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 121649 Accepted Submission(s): 73907

Problem Description
给你n个整数,求他们中所有奇数的乘积。

Input
输入数据包含多个测试实例,每个测试实例占一行,每行的第一个数为n,表示本组数据一共有n个,接着是n个整数,你可以假设每组数据必定至少存在一个奇数。

Output
输出每组数中的所有奇数的乘积,对于测试实例,输出一行。

Sample Input
3 1 2 3
4 2 3 4 5

Sample Output
3
15

Author
lcy

问题解答

#include <stdio.h>
int main()
{
    int n, number, multiplication;
    while( scanf( "%d", &n) != EOF )
    {
        multiplication = 1;
        for( int i=1; i<=n; i++)
        {
            scanf( "%d", &number );
            if( number%2 == 1 ) multiplication*=number;
        }
        printf( "%d
", multiplication );
    }
}

笔记

  1. 题目要求“包含多个测试实例”,说明要用while(scanf("%d",&n)!=EOF)循环进行嵌套。
  2. 题目要求“每行的第一个数为n,表示本组数据一共有n个”,提示很明显,n是一个要求用户输入的控制内层循环的变量,内部循环一次就要用户输入一个值并判断这个值是不是奇数(在这边我采用的是for循环,因为短)。
  3. 第10、11行,注意:不能合并为if(scanf("%d",&number)%2==1) multiplication*=number;否则判断无效,具体为什么不可以的原理我也没有弄清楚,可能涉及一些其他更深奥的东西,反正进行测试的时候就会出错。
  4. 第4、7行,赋值multiplication=1需注意在while循环内、for循环外,定义int multiplication则要放在while函数外(这一部分知识是关于函数局部变量和调用机制的,知识点挺杂,不详细介绍了;一般多码码代码,多出几次错,多调试几次,自己就get到那个点了)
原文地址:https://www.cnblogs.com/yuzilan/p/10626217.html