簡體   English   中英

如何從用戶輸入中提取偶數,並在C程序中將它們組合為一個新數

[英]how to extract the even number from user input, and combine them as a new number in C program

測試用例:

輸入: 1234
輸出: 24

輸入: 2468
輸出: 2468

輸入: 6
輸出: 6

我有這個代碼:

#include <stdio.h>
#include <math.h>

int main() {
    int num;
    printf("Enter a number: \n");
    scanf("%d", &num);

    int numberLength = floor(log10(abs(num))) + 1;
    int inputNumberArray[numberLength];

    int evenNumberCount = 0;
    int even[10];//new even no. array

    int i = 0;
    do {
        inputNumberArray[i] = num % 10;
        num = num / 10;
        i++;
    } while (num != 0);

    i = 0;
    while (i < numberLength) {
        if (inputNumberArray[i] % 2 == 0) {
            evenNumberCount ++;
            even[i] = inputNumberArray[i];
        }
        i++;
    }
    printf("array count %d\n", evenNumberCount);

    i = 0;
    for (i = 0; i < 8; i++) {
        printf(" %d", even[i]);//print even array
    }

    i = 0;
    int result = 0;
    for (i = 0; i < 10; i++) {
        if (evenNumberCount == 1) {
            if (even[i] != 0) {
                result = even[i];
            } else {
                break;
            }
        } else {
            if (even[i] != 0) {
                result = result + even[i] * pow(10, i);
            } else
                 break;
        }
    }
    printf("\nresult is %d", result);
    /*
    int a = 0;
    a = pow(10, 2);
    printf("\na is %d", a);
    */
}

當我輸入數字1234 ,結果/結果是4 ,而不是24

但是當我測試其余的測試用例時,它很好。

我認為錯誤的代碼是這樣的: result = result + even[i] * pow(10, i);

你能幫忙嗎? 提前致謝。

為什么你必須讀為數字? 最簡單的算法是

  • 作為文本閱讀
  • 證實
  • 循環並確認是否可被 2 整除並實時打印

接下來,你有沒有嘗試調試? 調試會讓你知道什么地方做錯了。 最后的問題是索引。

evenNumberCount ++; /// this is technically in the wrong place. 
even[i]=inputNumberArray[i];  /// This is incorrect. 

正如用戶 Popeye 所建議的那樣,完成此操作的一種更簡單的方法是將用戶的整個輸入作為字符串讀取。 使用這種方法,您可以遍歷 char 數組中的每個字母並使用 isdigit() 方法查看該字符是否為數字。 然后,您可以輕松檢查該數字是否為偶數。

這是我編寫的一個快速源代碼,用於展示這種方法的實際效果:

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

int main()
{
    char input[100] = { '\0' };
    char outputNum[100] = { '\0' };

    // Get input from user
    printf("Enter a number: ");
    scanf_s("%s", input, sizeof(input));

    // Find the prime numbers
    int outputNumIndex = 0;
    for (int i = 0; i < strlen(input); i++)
    {
        if (isdigit(input[i]))
        {
            if (input[i] % 2 == 0)
            {
                outputNum[outputNumIndex++] = input[i];
            }
        }
    }

    if (outputNum[0] == '\0')
    {
        outputNum[0] = '0';
    }

    // Print the result
    printf("Result is %s", outputNum);

    return 0;
}

我想出了解決方案,這更容易理解。

#include <stdio.h>
#include <math.h>
#define INIT_VALUE 999
int extEvenDigits1(int num);
void extEvenDigits2(int num, int *result);
int main()
{
 int number, result = INIT_VALUE;

 printf("Enter a number: \n");
 scanf("%d", &number);
 printf("extEvenDigits1(): %d\n", extEvenDigits1(number));
 extEvenDigits2(number, &result);
 printf("extEvenDigits2(): %d\n", result);
 return 0;
}
int extEvenDigits1(int num)
{

    int result = -1;
    int count = 0; 
    while (num > 1) {
        int digit = num % 10;
        if (digit % 2 == 0) {
            result = result == -1 ? digit : result + digit * pow(10, count);
            count++;
        }
        num = num / 10;
    }

    return result;
}    
}

恐怕你把事情復雜化了。

您可以將數字作為字符串讀取,並輕松處理每個字符,生成另一個要打印的字符串。

如果需要處理數字類型,有一個更簡單的解決方案:

#include <stdio.h>

int main(void)
{
    // Keep asking for numbers until scanf fails.
    for (;;)
    {
        printf("Enter a number:\n");

        // Using a bigger type, we can store numbers with more digits.
        long long int number;

        // Always check the value returned by scanf.
        int ret = scanf("%lld", &number);
        if (ret != 1)
            break;

        long long int result = 0;

        // Use a multiple of ten as the "position" of the resulting digit. 
        long long int power = 1;

        // The number is "consumed" while the result is formed.
        while (number)
        {
            // Check the last digit of what remains of the original number
            if (number % 2 == 0)
            {
                // Put that digit in the correct position of the result
                result += (number % 10) * power;

                // No need to call pow()
                power *= 10;
            }

            // Remove the last digit.
            number /= 10;
        }

        printf("result is %lld\n\n", result);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM