在 int 末尾查找 0 的个数
Find Number of 0's at end of int
我想找出整数末尾0的个数。
假设任何人输入 2020 它应该计数 1,如果数字是 2000 它应该显示 3 等;
我试过跟随但没有完成我想要的:(
Console.WriteLine("Enter Number :");
int num = int.Parse(Console.ReadLine());
int count = 0;
for (int i = 1; i < num.ToString().Count(); i++)
{
//some logic
}
Console.WriteLine("Zero in the tail is :");
Console.WriteLine(count);
你没有在你的循环中改变任何东西 - 所以基本上,在每次迭代中它会增加 Count
或者它不会,并且每次都会做同样的事情 - 所以 Count
要么是字符串的长度,要么是 0。
我能想到的最简单的文本操作选项是:
string text = num.ToString();
int count = text.Length - text.TrimEnd('0').Length;
但是,如果不使用文本操作,您可以只使用除法和取余运算:
int count = 0;
// Keep going while the last digit is 0
while (num > 0 && num % 10 == 0)
{
num = num / 10;
count++;
}
请注意,这将为数字 0 生成 0 的计数...而第一种方法将给出 1 的计数(因为 0.ToString()
为“0”)。调整任何一段代码以满足您的要求:)
你也可以走数学之路
int n = int.Parse(Console.ReadLine());
int totalzero = 0 ;
while(n > 0){
int digit = n % 10;
if(digit == 0)
totalzero++;
else
break;
n = n / 10;
}
你可以通过像这样从后面迭代字符串来做到这一点:
var strN = 40300.ToString();
int count = 0;
for (var i = strN.Length - 1; strN[i] == '0'; --i, ++count) ;
Console.WriteLine("Result : " + count);
int GetTrailingZerosFromInteger(int no)
{
if (no == 0)
return 1;
int count = 0;
while(no % 10 == 0)
{
no /= 10;
count++;
}
return count;
}
由于 32 位整数最多可以有 9 个零,因此您可以以非常令人愉快的方式展开循环:
int digits =
num == 0 ? 0 :
num % 1000000000 == 0 ? 9 :
num % 100000000 == 0 ? 8 :
num % 10000000 == 0 ? 7 :
num % 1000000 == 0 ? 6 :
num % 100000 == 0 ? 5 :
num % 10000 == 0 ? 4 :
num % 1000 == 0 ? 3 :
num % 100 == 0 ? 2 :
num % 10 == 0 ? 1 : 0;
我想找出整数末尾0的个数。 假设任何人输入 2020 它应该计数 1,如果数字是 2000 它应该显示 3 等;
我试过跟随但没有完成我想要的:(
Console.WriteLine("Enter Number :");
int num = int.Parse(Console.ReadLine());
int count = 0;
for (int i = 1; i < num.ToString().Count(); i++)
{
//some logic
}
Console.WriteLine("Zero in the tail is :");
Console.WriteLine(count);
你没有在你的循环中改变任何东西 - 所以基本上,在每次迭代中它会增加 Count
或者它不会,并且每次都会做同样的事情 - 所以 Count
要么是字符串的长度,要么是 0。
我能想到的最简单的文本操作选项是:
string text = num.ToString();
int count = text.Length - text.TrimEnd('0').Length;
但是,如果不使用文本操作,您可以只使用除法和取余运算:
int count = 0;
// Keep going while the last digit is 0
while (num > 0 && num % 10 == 0)
{
num = num / 10;
count++;
}
请注意,这将为数字 0 生成 0 的计数...而第一种方法将给出 1 的计数(因为 0.ToString()
为“0”)。调整任何一段代码以满足您的要求:)
你也可以走数学之路
int n = int.Parse(Console.ReadLine());
int totalzero = 0 ;
while(n > 0){
int digit = n % 10;
if(digit == 0)
totalzero++;
else
break;
n = n / 10;
}
你可以通过像这样从后面迭代字符串来做到这一点:
var strN = 40300.ToString();
int count = 0;
for (var i = strN.Length - 1; strN[i] == '0'; --i, ++count) ;
Console.WriteLine("Result : " + count);
int GetTrailingZerosFromInteger(int no)
{
if (no == 0)
return 1;
int count = 0;
while(no % 10 == 0)
{
no /= 10;
count++;
}
return count;
}
由于 32 位整数最多可以有 9 个零,因此您可以以非常令人愉快的方式展开循环:
int digits =
num == 0 ? 0 :
num % 1000000000 == 0 ? 9 :
num % 100000000 == 0 ? 8 :
num % 10000000 == 0 ? 7 :
num % 1000000 == 0 ? 6 :
num % 100000 == 0 ? 5 :
num % 10000 == 0 ? 4 :
num % 1000 == 0 ? 3 :
num % 100 == 0 ? 2 :
num % 10 == 0 ? 1 : 0;