C++;从列表中计算奇数 我尝试用C++编写一个程序,用户应该输入10个整数,并将奇数的数目分给用户。例如,用户输入:7,26,44,3,78,3,24,66,25,90,12,输出为“列表中有3个奇数”
我似乎找不到我做错了什么。非常感谢您的帮助 这是我的节目:C++;从列表中计算奇数 我尝试用C++编写一个程序,用户应该输入10个整数,并将奇数的数目分给用户。例如,用户输入:7,26,44,3,78,3,24,66,25,90,12,输出为“列表中有3个奇数”,c++,C++,我似乎找不到我做错了什么。非常感谢您的帮助 这是我的节目: #include <iostream> using namespace std; int main() { int limit; int counter; int sum; int number; cout<<"Enter 10 digits:"<<endl; cin>>limit; counter=0; sum=0;
#include <iostream>
using namespace std;
int main()
{
int limit;
int counter;
int sum;
int number;
cout<<"Enter 10 digits:"<<endl;
cin>>limit;
counter=0;
sum=0;
while (counter < limit)
{
cin>>number;
counter++;
if (number%2==1)
sum++;
}
cout<<"the number of odd numbers are"<<sum<<endl;
}
#包括
使用名称空间std;
int main()
{
整数极限;
整数计数器;
整数和;
整数;
库特号码;
计数器++;
如果(编号%2==1)
sum++;
}
cout您的代码在while循环中出错。在那里写编号是没有意义的。您已经获取了所需的10位数字。while循环当前请求用户输入N
次数,其中N
等于输入的10位数字
您的目标是从int limit
中提取一个数字,并检查它是偶数还是奇数。以下是修改后的代码:
while (limit != 0)
{
int digit = limit % 10; // extract last digit of limit
limit = limit / 10; // remove last digit from limit
if (digit % 2 == 1) // check if digit is odd
sum++;
}
编辑:正如MikeHousky所指出的,应该使用long-long来存储10位数字。更合理的做法是以字符串的形式进行输入,然后对字符串进行操作。目前,您告诉用户“输入10位数字”,我认为这意味着一个10位数字。然后你循环直到他们输入了那个数字。因此,如果我输入1234567890,我将在那里度过余生,输入数字
也许在用户输入非int
之前接受int
的东西更有意义:
cout << "Enter numbers, to quit type: exit" << endl;
cout << "the number of odd numbers are " << count_if(istream_iterator<int>(cin), istream_iterator<int>(), [](int i)->bool{return i & 1;}) << endl;
我似乎找不到我做错了什么-你能详细说明一下吗?这个程序有什么问题?应该是一个10位数字中有多少个奇数位吗?我不知道你是如何理解这个逻辑的问题是什么?它应该可以工作,但你的代码有点误导,你应该没有指定输入是什么样子的。如果输入由空格、制表符或换行符分隔的10位数字组成,那么您的程序确实可以工作。如果您正在读取10个连续数字,cin>>number
会将整个内容读取为单个int值,如果结果>=2^31,则会丢失前导零并产生垃圾。您还可以使用while(limit!=0)
控制循环,使其在任何大小的数字上运行。while条件是错误的,如果第一个数字是0,这将不起作用,如果在一台int等于或小于32位的机器上有3个或更多,这也不起作用。谢谢。编辑了while循环@MikeHousky,你能解释一下你评论的第二部分吗?@NathanOliver不介意前导零,因为他在数数字,但不使用总和。如果尝试将3123456789读入32位int,则会出现溢出。您需要更宽的数字类型,以避免一次读取字符。谢谢您,乔纳森。我意识到我的问题犯了一个严重的错误,所以你们中的许多人都不清楚。我在问题中的意思是,用户应该输入10个整数,而不是10个数字。