【问题标题】:How to make this program more efficient?( Program to find whether the digits of a given number are in ascending order) [closed]如何使这个程序更高效?(程序来查找给定数字的数字是否按升序排列)[关闭]
【发布时间】:2018-10-18 12:52:52
【问题描述】:

我编写了这个程序来查找接受的整数的数字是否按任何特定顺序(升序或降序)。虽然它有效,但我被卡住了,因为我想让它更有效率(一旦确定没有顺序,循环应该停止并且不继续检查剩余的数字。) 提前致谢。

#include <iostream>

using namespace std;

int main()
{
 int     number,duplicate,i = 0,length = 0,j = 0,unit;
        cout<<" \n Enter a number \n";
        cin>>number;
        duplicate = number;
        unit = number%10;
        cout<<unit<<endl;
        while(number!=0)
        {
             number = number/10;
             cout<<"NO \n"<<number<<'\n'<<i<<'\n'<<j;
             if(unit<number)    j++;
             else if(unit>number)   i++;
             else number = 0;

        }
        while(duplicate!=0)
        {
            length++;
            duplicate=duplicate/10;
        }
        cout<<length;
        if(i==length-1) cout<<" \n Ascending";
        else if(j==length-1) cout<<" \n Descending ";
        else if(number==0)   cout<<" \n No order";
        return 0;

}

【问题讨论】:

  • 将号码读取为std::string。然后你只需迭代字符串以查看它是否有模式。
  • 如果你想改进已经工作的代码,最好在SE Code Review提出这样的问题。
  • 读取为字符串,然后比较字符。这将从您正在做的事情中节省大量计算。此外,一旦发现异常,请使用break 停止循环。
  • 如果数字是递增的,则在看到递减值时立即停止,反之亦然。 (如果两个序号相同,这很复杂:您无法确定它们是升序还是降序。)
  • @tevemadar 随意推荐 CR 上的 OP 帖子,但在未来,请不要使用代码审查作为关闭问题的理由。评估请求并使用太宽泛主要基于意见等原因。然后您可以向 OP 提及它可以在 Code Review 上发布(如果是) on-topic。请参阅this answer to A guide to Code Review for Stack Overflow users 中的你不应该做的事情部分

标签: c++ numbers int new-operator digits


【解决方案1】:

这是其他人评论过的方法示例,使用字符串作为输入。遍历字符,一旦顺序改变就中断。

#include <cstdlib>
#include <iostream>

enum Order { None, Ascending, Decending };

int main()
{
    std::string input;
    std::cout << "Enter a number" << std::endl;
    std::cin >> input;

    Order prevOrder = None;
    if( input.size() > 1 ) {
        for( std::size_t i=1; i<input.size(); i++ ) {
            if( (prevOrder != Decending) && (input[i-1] < input[i]) )
                prevOrder = Ascending;
            else if( (prevOrder != Ascending) && (input[i-1] > input[i]) )
                prevOrder = Decending;
            else {
                prevOrder = None;
                break;
            }
        }
    }

    std::cout << input << ( (prevOrder == Ascending) ? " is ascending." :
                            (prevOrder == Decending) ? " is decending." :
                                                       " has no order." );
    std::cout << std::endl;
    return 0;
}

【讨论】:

  • @TobySpeight 好点。已删除。
猜你喜欢
  • 1970-01-01
  • 2020-10-18
  • 2015-07-25
  • 1970-01-01
  • 1970-01-01
  • 2022-01-10
  • 2016-07-05
  • 2014-01-08
  • 2011-08-28
相关资源
最近更新 更多