创建一个程序,将一串数字和输出作为输入 偶数和奇数之和的总和。这个程序在 C ++
注意:建议您使用“for”循环迭代 刺痛的数字。提示:使用模数运算符确定偶数或 奇数。
将“char”转换为“int”的巧妙方法如下:
char a = '4'; int ia = a - '0';
上面的代码利用了角色在中的位置 ASCII表将其转换为整数。
以下是我目前的代码:
int main() {
int sumOdd = 0; // For accumulating odd numbers, init to 0
int sumEven = 0; // For accumulating even numbers, init to 0
int digits; // Sum from 1 to this upperbound
// Prompt user for an upperbound
cout << "Please enter a string comprised ONLY of digits:" << endl;
cout << endl;
cin >> digits;
// Use a while-loop to repeatedly add 1, 2, 3,..., to the upperbound
int number = 1;
while (number <= digits) {
if (number % 2 == 0) { // Even number
sumEven += number; // Add number into sumEven
} else { // Odd number
sumOdd += number; // Add number into sumOdd
}
++number; // increment number by 1
}
// Print the results
cout << "The string of digits \"" << digits << "\""
<< " contained "
<< "characters." << endl;
cout << "The sum of the even digits is: " << sumEven << endl;
cout << "The sum of the odd digits is: " << sumOdd << endl;
return 0;
}
这是我的输出与我需要的输出相比
输入:
1234567890
输出:
Please enter a string comprised ONLY of digits:
The string of digits "1234567890" contained characters.
The sum of the even digits is: -380436870
The sum of the odd digits is: -997720815
预期输出
Please enter a string comprised ONLY of digits:
The string of digits "1234567890" contained 10 characters.
The sum of the even digits is: 20
The sum of the odd digits is: 25
总的来说,我无法计算输入并获得偶数和奇数的正确公式。非常感谢您的帮助!
答案 0 :(得分:2)
一种简单的方法是将数字保存为文本形式:
std::string number_as_text;
cout << "Enter number: ";
cin >> number_as_text;
这允许您检查偶数或奇数的每个数字:
const size_t length = number_as_text.length();
for (size_t i = 0; i < length; ++i)
{
char digit_character = number_as_text[i];
if (isdigit(digit_character))
{
if (digit_character % 2 == 0)
{
// digit is even
}
else
{
// digit is odd
}
}
}
如果您不喜欢isdigit()
,可以替换为:
if ((digit_character >= '0') && (digit_character < '9'))
一个重要的注意事项是数字的文本表示与数字的内部,数字,表示之间存在差异。
在%
类型上编辑1:char
char
数据类型是整数。余数运算符%
适用于整数类型。因此,您可以在%
类型上使用char
。
注意:此操作假定'0'
的字符映射是偶数整数,其他数字在值中是连续的。
答案 1 :(得分:1)
读取字符串字段中的输入而不是整数 -
std::string digits;
然后,只需运行一个有效的循环来找出偶数位和奇数位的总和 -
for(int i=0; i<digits.length(); i++){
int digit = digits[i]-'0';
if(digit % 2 == 0)
sumEven+=digit;
else
sumOdd+=digit;
}
下面是一段正在运行的代码。
// Example program
#include <iostream>
#include <string>
using namespace std;
int main() {
int sumOdd = 0; // For accumulating odd numbers, init to 0
int sumEven = 0; // For accumulating even numbers, init to 0
std::string digits; // Sum from 1 to this upperbound
// Prompt user for an upperbound
cout << "Please enter a string comprised ONLY of digits:" << endl;
cout << endl;
cin >> digits;
// Use a while-loop to repeatedly add 1, 2, 3,..., to the upperbound
int number = 1;
for(int i=0; i<digits.length(); i++){
int digit = digits[i]-'0';
if(digit % 2 == 0)
sumEven+=digit;
else
sumOdd+=digit;
}
// Print the results
cout << "The string of digits \"" << digits << "\""
<< " contained "
<< "characters." << endl;
cout << "The sum of the even digits is: " << sumEven << endl;
cout << "The sum of the odd digits is: " << sumOdd << endl;
return 0;
}
答案 2 :(得分:0)
你弄错了你应该做1 + 3 + 5 + 7 + 9和2 + 4 + 6 + 8 + 0之和。你做的是小于1234567890的所有偶数和小于1234567890的奇数之和的总和。
也许考虑而不是通过cin >> digits
获取字符串中的所有数字而不是逐个字符地输入它。
检查此代码,它从输入中读取字符并将其吐回。
#include<iostream>
using namespace std;
int main() {
cout << "Please enter a string comprised ONLY of digits:" << endl;
cout << endl;
char one;
while ( true ) {
cin >> one;
// here will come your part with deciding even / odd and counting instead of pritnting out.
cout << " " << one;
if ( cin.peek() == '\n' ) { break; }
}
return 0;
}
现在轮到你把它放在一起了。
答案 3 :(得分:0)
使用std::getline
将所有数字读入std::string
:
std::cout << "Enter string of numbers: " << std::endl;
if (std::string numbers; std::getline(std::cin, numbers)) {
/* ... */
}
请注意在即将推出的C ++ 1z标准中使用 conditional-if 。
然后,你可以利用std::pair
整齐地积累这样的赔率和平均值:
std::pair odd_even{0, 0};
for (auto c : numbers) {
(c % 2 ? std::get<0>(odd_even) : std::get<1>(odd_even)) += c - '0';
}
答案 4 :(得分:-1)
这个逻辑应该起作用
for(int i=0; i<digits.lenght; i++){
if(digits[i] % 2 == 0)
sumEven+=digits[i];
else
sumOdd+=digits[i];
}