我正在做作业,我很难解决这个问题:编写一个程序,提示用户输入一个整数,然后输出数字的各个数字和数字的总和。例如,它应将3456
的各个数字输出为3
4
5
6
,[...],输出4000
为
4
0
0
0
以及-2345的个别数字2
3
4
5
。
到目前为止,这是我的代码:
int main()
{
string a; //declares string
cout << "Type an integer: "; //prompts user to input an integer
cin >> a; //stores into string a
cout << "There are " << a.size() << " digits in " << a << endl; //retrieves length of string a
cout << a.at(0);
cout << endl;
system ("pause"); //pauses the system so user can read the screen
return 0; //returns 0 if program works properly
}
任何人都可以告诉我我做错了什么/下一步是什么?
答案 0 :(得分:1)
所以步骤是..
#include<string>
#include<iostream>
using namespace std;
int main()
{
string a;
cout << "Type an integer: ";
// 1. store the input
cin >> a;
// 2. display them all one by one separated by spaces
for(int i=0;i<a.size();++i)
cout << a[i] << ' ';
cout << endl;
// 3. figure out the sum and display that
int total = 0;
for(int i=0;i<a.size();++i)
total += a[i] - '0';
cout << total << endl;
system("pause");
return 0;
}
棘手的部分是在第3步获得正确的总和。
total += a[i] - '0';
让我们说例如a [i]是字符'4'。字符'4'的ASCII值是等于52的整数,相当于'0'的ASCII整数是48.因此,如果我们取'4' - '0',我们将得到4的差值,即我们在这种情况下寻找的整数表示。
Here是一个带有字符值的简单ASCII图表。
希望这有帮助!
答案 1 :(得分:0)
您可能希望将数字输入为字符串。这将允许您进行逐位处理。然后,用户将输入一次而不是多次数字。
答案 2 :(得分:0)
你可以尝试这段代码:
int num = 0;
cin>>num;
//Make sure array is large enough to hold all digits
//For an int 10 digits it the max
int digits[10] = {0};
//This variable tracks the count of actual number of
//digits extracted from user input
int digitCount = 0;
while (num > 0)
{
digits[digitCount] = num % 10; //Extract digit at units place
num = num / 10; //Advance through the number
digitCount++;
}
for(int count= digitCount-1 ; count >= 0; count-- )
{
cout<<digits[count]<<" ";
}
请注意,打印循环向后运行(即从digitCount
到zero
),因为从单位位置开始提取和存储数字。对于12345
之类的数字,digits
数组将包含5 4 3 2 1
。
答案 3 :(得分:0)
您说您的程序应输出数字中的每个数字,但您的程序会要求用户输入每个数字。这令人困惑。
此外,您首先在此处为“num”分配值
cin >> num;
然后你在这一行中覆盖“num”
cin >> num >> a;
我不确定你在这里做什么,但是你告诉计算机要做的是从输入读取一个整数并将其分配给“num”并将其余部分分配给字符串“ a ......如果线的其余部分只有空格,则空间将被丢弃......它充当分隔符。这也许让你感到困惑。
答案 4 :(得分:0)
int main()
{
int runningTotal = 0;
std::string inputString;
std::cin >> inputString;
for ( std::string::iterator _it = inputString.begin();
_it != inputString.end(); ++_it )
{
// *_it now represents an individual char of the input string
char a = *_it; char* b = &a;
if ( a != '-' )
{
runningTotal += atoi( std::string( b ).c_str() );
std::cout << *_it << " ";
}
}
std::cout << std::endl << "Total of all digits: " << runningTotal << std::endl;
std::cin.get();
std::system( "pause" );
return 0;
}
我很快就把它扔给你了。希望它有所帮助。