【问题标题】:Explanation of C++ CodeC++代码说明
【发布时间】:2016-06-01 09:43:25
【问题描述】:

我目前正在开发一个程序,该程序输出第一个数字大于最后一个数字的三位整数的数字 1089(即幻数)。我输入了一些代码,但没有收到 1089,而是收到 891。谁能提供一些解释原因。

 //Uses a cout to inform user will be using the number 412 as an example.
        //Uses a cout to explain to user the number needs to be reversed.
        cout << "Alright, let's walk through an example, using the number 412." << endl;
        int numExample = 412;
        cout << "Please input 412" << endl;
        cin >> numExample;
        cout << "First, the number 412 is reversed." << endl;
        //The following is done for reversing the number 412:
            int reverseNum = 0, remainder = 0;
            while (numExample)
            {
                remainder = numExample % 10;
                reverseNum = (reverseNum * 10) + remainder;
                numExample = numExample / 10;
            }
                cout << "The reverse of 412 is " << reverseNum << endl;
        cout << "Next, we want to subtract the reverse of the original number from its reverse" << endl;
        cout << "This gives us 198" << endl;
        cout << "From there, we want to reverse 198." << endl;
        //The same procedure is used to reverse 198
        int numExample2 = 198;
        cout << "Please enter 198" << endl;
        cin >> numExample2;
            int reverseNum2 = 0, remainder2 = 0;
            while (numExample2)
            {
                remainder2 = numExample2 % 10;
                reverseNum2 = (reverseNum2 * 10) + remainder2;
                numExample2 = numExample2 / 10;
            }
        cout << "The reverse of 198 is " << reverseNum2 << endl;
        int magicNumber = (reverseNum2 + numExample2);
        cout << "Following that, we want to add 891 to 189 which gives us " << magicNumber << endl;

【问题讨论】:

  • 提示:numExample2while (numExample2) 循环之后的值是多少? (如果您不知道,请打印出来。)
  • 我相信我在上面定义了它,但是numExample2 是一个等于 198 的 int。
  • 真的吗?打印reverseNum2 后立即添加cout &lt;&lt; numExample2 &lt;&lt; endl;。并多想一下导致循环结束的原因。

标签: c++ magic-numbers


【解决方案1】:

尝试编写一个函数来处理这个问题,这样你的代码就更干净了(它也会让人们更容易帮助你!)

#include <iostream> 
#include <cmath>
using namespace std;

int reverseDigit(int num); // For example purposes

int _tmain(int argc, _TCHAR* argv[])
{
    int Number1,
    Number2,
    temp1,
    temp2,
    Result;

    cout << "Enter the number 412: ";
    cin >> Number1;

    temp1 = reverseDigit(Number1);

    temp1 = Number1 - temp1;

    cout << "Enter the number 198: ";
    cin >> Number2;

    temp2 = reverseDigit(Number2);

    Result = temp1 + temp2; 

    cout << "The magic number is: " << Result << endl; 

    return 0; 
}

int reverseDigit(int num) 
{
    int reverseNum = 0;
    bool isNegative = false;

    if (num < 0)
    {
        num = -num;
        isNegative = true;
    }

    while (num > 0)
    {
        reverseNum = reverseNum * 10 + num % 10;
        num = num / 10;
    }

    if (isNegative)
    {
        reverseNum = -reverseNum;
    }

    return reverseNum;
}

我意识到您没有使用底片,因此如果您选择使用它,您可以删除该位,您也可以对其进行扩展...话虽如此,这将使实际的“反转过程”更易于使用并改进和阅读。

【讨论】:

  • @molbdnilo 或者只是做得更好,然后编写一个函数,这样您就不会迷失在自己的工作中! (请注意:您和您的使用是一般性的,并非针对您个人,而是针对任何阅读评论的人..)
猜你喜欢
  • 1970-01-01
  • 2013-03-04
  • 2012-06-25
  • 2013-09-12
  • 2017-01-23
  • 2014-09-21
  • 2015-01-13
  • 2015-08-16
  • 2010-11-25
相关资源
最近更新 更多