C++如何计算用户输入的数字中的偶数位数

C++ How to count the number of even digits in a user entered number?

本文关键字:数字 输入 用户 何计算 计算 C++      更新时间:2023-10-16

在这个问题中,我试图在用户输入的数字中找到偶数位数。我无法使用数组。该程序是一个基于菜单的程序,这是选项1。到目前为止,我想我已经把剩下的代码处理得很好了,只是这部分的数学问题让我很头疼。如果有任何帮助,我将不胜感激。

int main() {
int choice; // user input for menu options
const int evenDig = 1, // constants for menu choices
fact = 2,
quit = 3;
cout << "Welcome to playing with numbers!n";
do
{
showMenu (); // displays menu
cin >> choice;
// call getValidUserInputPosNumGT0, passing the value in choice
// as an argument
getValidUserInputPosNumGT0(choice);
if (choice == evenDig) // option 1
{
int num; // user entered number
cout << "Enter a positive number greater than zero...";
cin >> num;
numEvenDigits(num);
}

}while(choice != quit);
return 0;
}
void showMenu ()
{
cout << "1) Count the even digits in a numbern"
<< "2) Compute the factorial of a numbern"
<< "3) Quitn"
<< "Select an option (1..3).. ";
}
void getValidUserInputPosNumGT0 (int choice) // validation function
{
while ( choice < 1 || choice > 3) // input validation loop
{
cout << "Select an option (1..3).n";
cin >> choice;
}
}
int numEvenDigits (int num)
{
int even = 0; // int that will be returned as number of even numbers
if ( num > 0)
{
int rem = num % 10;
if (rem % 2 == 0)
even++;
cout << "numEvenDigits("<<num<<") = "<< even;
cout << endl;
}
else
cout << "Please enter a positive nonzero number." << endl;
}

谢谢!

由于有多种方法可以解决您想要解决的问题,我将尝试给出一些关于数学和思维过程的提示,以帮助您找到自己的解决方案,而不是提供解决方案

正如Sam Varshavchik所建议的,描述问题和解决方案,看看你在代码中做了什么,以及它是如何匹配的。

  • 您使用moduluo函数的方法是正确的:
    • 数字mod10="最右边的数字">
    • 数字mod2,如果奇数=1,如果偶数=0

所以你已经在你的代码中成功地完成了一次

int rem = num % 10;
if (rem % 2 == 0)
even++;

其余的数字呢?-->你在的某个地方错过了一个循环

12346为例

  • 第一轮num=12346,mod 10=6,mod 2=0-->偶数++
  • 下一轮?
    • 重复,但使用12345

我会让你弄清楚如何拨打12345。

  • 减法、除法、整数截断等

然后您将错过如何定义循环的结束。

干杯!

您需要更改一些代码

void getValidUserInputPosNumGT0 (int choice);

void getValidUserInputPosNumGT0 (int &choice);

因为若要修改选择,必须通过引用传递,而不是通过值传递。

int numEvenDigits (int num)
{
int even = 0; // int that will be returned as number of even numbers
if ( num > 0)
{
int rem = num % 10;
if (rem % 2 == 0)
even++;
cout << "numEvenDigits("<<num<<") = "<< even;
cout << endl;
}
else
cout << "Please enter a positive nonzero number." << endl;
}

int numEvenDigits (int num)
{
int even = 0;
if ( num > 0)
{
for (int val =num;val>0;val/=10)
{
if (val % 2 == 0)
even++;
}
cout << "numEvenDigits("<<num<<") = "<< even;
cout << endl;
}
else
cout << "Please enter a positive nonzero number." << endl;
return even; 
} 

或者,这与您的代码相似

int numEvenDigits (int num)
{
int even = 0,val=num,rem;
if ( num > 0)
{
while(val>0)
{
rem=val%10;
if(rem%2==0)
even++;
val/=10;
}
cout << "numEvenDigits("<<num<<") = "<< even;
cout << endl;
}
else
cout << "Please enter a positive nonzero number." << endl;
return even;
}

只需执行此操作即可在数字中找到偶数1.查找偶数位数的代码必须循环编写2.每次迭代后减少数字以移动下一个数字。记住我们从右到左数数字。

Int number, x, even=0;
Cin>> number;
While(num>=0)
{
X=num%10;
If(x%2==0)
Even++;
Num=num/10;// decrease number
}