首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

杭電 OJ 2006:求奇數乘積 - C 語言解題詳解

     編輯:關於C語言

題目描述

輸入一個整數 n,隨後輸入 n 個整數。計算這 n 個整數中所有奇數的乘積。輸入包含多組測試數據,以 EOF 結束。若無奇數,乘積為 1(空乘積定義)。

解題邏輯

初始化乘積為 1。遍歷 n 個數字,若為奇數(`num % 2 != 0`),則乘入結果。注意:負奇數也參與乘積計算。

參考代碼

#include <stdio.h>

int main(void) {
    int n, i, num;
    long long product;  // 乘積增長極快,必須用長整型

    while (scanf("%d", &n) != EOF) {
        product = 1;

        for (i = 0; i < n; i++) {
            scanf("%d", &num);
            if (num % 2 != 0)
                product *= num;
        }

        printf("%lld\n", product);
    }

    return 0;
}

關鍵點

  • 奇數判斷:`num % 2 != 0` 涵蓋正負奇數,比 `num % 2 == 1` 更正確
  • 溢出風險:乘積增長極快,即使 `long long` 也可能溢出。實際 OJ 題目通常保證結果在範圍內,或要求取模
  • 空乘積:無奇數時輸出 1,符合數學定義

常見錯誤

使用 `int` 存儲乘積會導致溢出錯誤;將初始值設為 0 會導致結果恆為 0。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved