簡體   English   中英

程序檢查一個數字是否有一個數字或能被那個數字的值整除

[英]Program to check if a number has a digit or is divisible by that digit's value

這是一個您必須從 0 數到 1000 的游戲。但是,如果數字中有 6,或者可以被 6 整除,則應打印“Shaggy”,否則應打印數字。

規則:

  1. 您不能對數字進行硬編碼。

  2. 該號碼只需滿足以下要求中的至少一項

    • 能被 6 整除
    • 數字包含一個 6
  3. 某些類型的分隔符是強制性的(12345Shaggy7.. 不計算在內)

  4. 您必須從 1 精確數到 1000。

  5. 數字必須是 output,但如何(例如,標准輸出、寫入文本文件等)並不重要。

這是我嘗試過的代碼:

#include <iostream>
#include <conio.h>

bool is_digitPresent(int x, int d)
{
    while (x > 0)
    {
        if (x % 10 == d)
            break;
        x = x / 10;
    }
}

int main()
{
    int i, n, x;
    clrscr();
    std::cout << "----------------Let's play The Shaggy Game....Are you ready..?------------------\n";
    std::cout << "Enter a number!";
    std::cin >> n;
    for (i = 0; i < n; i++)
    {
        if (i % 6 == 0 || is_digitPresent(i, 6))
            std::cout << "Shaggy!\t";
        else
            std::cout << i << "\t";
    }
    getch();
    return 0;
}

但它沒有按預期工作,我做錯了什么?

問題是is_digitPresent不返回任何內容,稍后在 boolean 表達式中使用它會調用未定義的行為。

你需要類似的東西:

bool is_digitPresent(int x, int d)
{
    while (x > 0)        
    {                     
        if (x % 10 == d)   
            return true;   
        x = x / 10;        
    }                    
    return false;
}

固定的,主要是循環:

for (i = 0; i < n; i++){ /*...*/}

意義不大,因為 output 的限制是輸入的數字本身,只需將其刪除一次即可。

如果目標是創建一個循環,程序不斷要求用戶輸入,或者您希望輸入的值具有上限,那么您完全需要其他東西。

此外, i不是您要測試的值,而是n ,它是輸入的值。

刪除 for 循環並將其替換為:

if (n % 6 == 0 || is_digitPresent(n, 6))
    std::cout << "Shaggy!\t";
else
    std::cout << n << "\t";

現場演示

請注意,此答案只是一個錯誤修復,您提到的某些規則不在其中,也不是本論壇的目標,目標是讓您自己完成練習,如果需要,請提供一些幫助。

暫無
暫無

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

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