检查数字是否在增加

本文关键字:增加 是否 数字 检查 | 更新日期: 2023-09-27 17:50:36

如何检查数字是否在增加?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 ?
             }
         }
    }

也,我怎么能做到没有子字符串方法?

检查数字是否在增加

不需要在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;
}

您使用的方法不是很好。首先,b总是比a大,因为你给长度函数输入的是1和2,而不是位置。例如,如果你取12345这个数字,a将是1,b将是12。此外,Substring方法是在调用时计算的,因此在定义它之后,如果不再次调用Substring,就无法修改参数。可以这样想:如果你把一个方法的结果赋值给一个变量,那么这个方法就必须计算出这个结果,所以如果你想要一个不同的结果,它就必须重新计算。然而,您根本不需要使用Substring方法。在c#中,字符串可以通过索引来访问,所以你可以对第一个元素说myString[0](记住,c#中的索引是0索引,所以第一个项目的索引是0)。

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语句。While循环将反复遍历语句体,在每次开始计算之前测试条件,而if语句只运行一次。通常,在可能的情况下使用if语句,因为while循环有可能无限期地运行(因为您可能会进入一个永远不满足条件的状态,并且它会一直循环下去)。

你可以看看字符串中索引为I的元素是否大于I -1的元素(对于每个索引从1开始的元素)

您可以使用这个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;