检查数字是否在增加?

时间:2013-01-02 12:20:24

标签: c#

我如何检查数字是否在增加? 123456真 423659-假

我试试

while (newNumber != 0)
         {

             string a = newNumber.ToString().Substring(0, 1);
             string b = newNumber.ToString().Substring(0, 2);

             input1 = Convert.ToInt32(a);
             input2 = Convert.ToInt32(b);

             if (input1 < input2)
             {
                 ////how do i increase substring a&b +1 ?

             }

         }

    }

另外,如果没有substring方法,我该怎么办呢?

4 个答案:

答案 0 :(得分:2)

无需在stringint之间来回转换数字。在C#中,字符串可以作为字符数组枚举,并且字符在彼此之间是可比较的:

bool IsIncreasing(int number)
{
    string text = number.ToString();
    char previous = '0';

    foreach(char c in text)
    {
        if(c <= previous)
            return false;
        previous = c;
    }

    return true;
}

答案 1 :(得分:1)

您使用的方法不是很好。首先,b总是大于a,因为你将1和2输入长度函数,而不是位置。因此,例如,如果取数字12345,则a将​​为1,b将为12.此外,Substring方法在调用时计算,因此在定义参数后不能再次调用Substring,也无法修改参数。可以这样想:如果将方法的结果分配给变量,那么方法必须计算出该结果,因此如果您想要不同的结果,则必须再次计算。但是,您根本不需要使用Substring方法。在C#中,可以通过索引访问字符串,因此您可以对第一个元素说myString[0](请记住,C#中的索引是0索引的,因此第一个项是索引0)。要执行您正在检查的内容,您可以使用for循环,如下所示:

if (newNumber != 0)
     {

         string a = newNumber.ToString();

         for(int i = 1; i < a.Length; i++)
         {
             int input1 = Convert.ToInt32(a[i-1]);
             int input2 = Convert.ToInt32(a[i]);

             if (input1 >= input2) //Note the reversed condition
             {
                 return false; //Gives the false result

             }
         }
         return true; //Computation finished, so the number is increasing
     }

}

如果我能正确理解你的问题,这种方法应该很快,并且几乎完全符合你的要求。另外,我不确定你为什么使用while循环,因为你不在循环体中改变“newNumber”,程序将在循环中计算直到某些东西停止它。你应该使用if语句。虽然循环会一遍又一遍地循环遍历主体,但在每次开始计算之前测试条件,而if语句只运行一次。通常,尽可能使用if语句,因为while循环有可能无限期地运行(因为你可以进入一个永远不会满足条件的状态,并且它会一遍又一遍地循环)。

答案 2 :(得分:0)

你可以看看字符串中索引为i的元素是否大于元素i-1(对于每个元素的索引都是1)。

答案 3 :(得分:0)

您可以使用此LINQ链。 asc1asc2是布尔值,第一个是真,第二个是假。链的作用是检查索引等于零或索引大于零但仍然大于前一个的字符数是否等于字符串的长度。它不解析字符,因为假设字符串只是数字,它们的ASCII值将落在30..39的范围内,因此在检查中仍然有效。

var s1 = "123456";
var s2 = "423659";
var asc1 = s1.Where((c, i) => i == 0 || c > s1[i - 1]).Count() == s1.Length;
var asc2 = s2.Where((c, i) => i == 0 || c > s2[i - 1]).Count() == s2.Length;