输入一个整数,用C ++获得间隔输出?

时间:2012-03-09 02:54:36

标签: c++

我正在做作业,我很难解决这个问题:编写一个程序,提示用户输入一个整数,然后输出数字的各个数字和数字的总和。例如,它应将3456的各个数字输出为3 4 5 6,[...],输出40004 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

}

任何人都可以告诉我我做错了什么/下一步是什么?

5 个答案:

答案 0 :(得分:1)

所以步骤是..

  1. 存储输入
  2. 以空格分隔显示所有内容
  3. 计算总和并显示
  4. #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]<<" ";
   }

请注意,打印循环向后运行(即从digitCountzero),因为从单位位置开始提取和存储数字。对于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;
}

我很快就把它扔给你了。希望它有所帮助。