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

C語言實作:輸入一串數字,移除含7或能被7整除的數值

     編輯:關於C

題目描述

輸入一串以逗號分隔的整數(每個數小於10000,數量小於100),要求過濾掉所有「包含數字7」或「能被7整除」的數值,最後輸出剩餘的數字,仍以逗號分隔。

輸入範例

1,7,56,77,87,2,45,42,97,9977

輸出範例

1,2,45

核心難點與解題思路

由於輸入數量不固定,無法直接使用整型陣列並以 \n 判斷結束(\n 是字元,無法存入整型陣列)。因此必須採用字串處理:先將整行輸入讀入字元陣列,再依照逗號切割並轉換為整數,最後逐一判斷。

判斷邏輯

  • 若數值能被7整除(num % 7 == 0) → 排除
  • 若數值任一位為7(個位、十位、百位、千位) → 排除
  • 其餘保留

完整程式碼實作

#include <stdio.h>
#include <string.h>

void main() {
    char input[1000000];
    int numbers[100], filtered[100];
    int i, j, k, len, current_num = 0, flag = 0, count = 0;

    gets(input);
    len = strlen(input);

    // 1. 字串解析:將逗號分隔的數字轉為整數陣列
    for (i = 0, j = 0; i <= len; i++) {
        if (input[i] >= '0' && input[i] <= '9') {
            current_num = current_num * 10 + (input[i] - '0');
            flag = 1;
        } else if (flag == 0) {
            continue; // 跳過非數字且非數字開始前的字元
        } else {
            numbers[j++] = current_num;
            count++;
            current_num = 0;
            flag = 0;
        }
    }

    // 2. 過濾邏輯
    for (i = 0, j = 0; i < count; i++) {
        int num = numbers[i];
        if (num % 7 == 0) continue;
        if (num % 10 == 7) continue;
        if ((num / 10) % 10 == 7) continue;
        if ((num / 100) % 10 == 7) continue;
        if ((num / 1000) % 10 == 7) continue;
        filtered[j++] = num;
    }

    // 3. 輸出結果
    for (i = 0; i < j - 1; i++) {
        printf("%d,", filtered[i]);
    }
    if (j > 0) printf("%d\n", filtered[j - 1]);
}

關鍵點總結

  1. 使用 gets() 讀取整行(注意:實際開發建議用 fgets() 防止緩衝區溢位)。
  2. 手動解析字串,將數字字元累積成整數,遇到非數字(逗號或結尾)時存入陣列。
  3. 過濾時逐位檢查是否含7,因題目限制數值 < 10000,故僅需檢查四位。
  4. 輸出時處理逗號格式,避免末尾多餘逗號。

此題考驗字串處理、陣列操作與條件判斷,是C語言基礎練習的經典範例。

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