使用模数查找数字的目的?

时间:2014-02-13 16:07:02

标签: c# modulus

真的在试图理解模数时绞尽脑汁。

这是一个练习题及其指导原则。 这是我的运动问题:

  

写一个表达式,如果第三个数字,则查找给定的整数   (从右到左)是7。

准则说明了这一点:

  

将数字除以100,然后将其保存在一个新变量中   除以10并取余数。其余部分由   10是原始数字的第三个数字。检查它是否相等   7。

所以我按照指南编写了代码。这是我的代码。

Console.WriteLine("Input 3 digit Number");
int input = int.Parse(Console.ReadLine());
input /= 100;
input %= 10;
if (input == 7)
{
Console.WriteLine("number is 7!");
}
else
{
Console.WriteLine("number is not 7");
}

问题是我不明白它是如何工作的,让我说我输入712作为数字,它左边的第3个数字是7,所以它应该工作,并且控制台会告诉我它是7。

但是,如果我计算712/100那是7.12。计算模数我把输入(现在7.12)除以10,减去整数(这是十进制,所以我减去0.71并再次乘以10,所以我留下0.02。

如果我将7.12%10运行到C#中,但我得到7.12作为输出。怎么样?

我错过了什么?我究竟做错了什么?这让我疯狂,真的需要帮助。 为什么使用模数以及如何获得输出?

P.S。我明白整数不会取小数,所以它会输出为7而不是7.12(因此代码说的是7)所以我理解这一点。

4 个答案:

答案 0 :(得分:3)

712 / 100不是7.12。它是7。如果您将7除以10,那么您将获得0。如果你将模数7 % 10,你会得到7,因为它是除7/10之外的其余部分。除法总是向下舍入到完整的十进制值,没有休息。这就是模数运算符的用途,您需要单独评估它们。

示例:

您的输入为1234512345/100为您提供了123,因为您在输入中有123 full hundrets。然后123/10会给你12,因为12 full tens中有123123%103给你123/10(这是你的号码')重新寻找),因为剩下的就是划分float

如果你需要在school-math类型中进行除法,请使用浮点类型,例如double12345f/100。 F.E. 123.45f会给你大约{{1}}。

答案 1 :(得分:1)

此处的问题实际上与C# %运算符无关。

这是因为您使用intdouble

  • int将永远是一个整数,因此它会像其他人所说的那样向下舍入。
  • 例如,
  • double将保留小数位。
  • C# %运算符不关心且不向下舍入 - 它只是为您提供与输入相同类型的余数

以下是快速测试:

int inputAsInt = 712;
inputAsInt /= 100;
inputAsInt %= 10;

Console.WriteLine(inputAsInt);
// prints 7

double inputAsDouble = 712;
inputAsDouble /= 100;
inputAsDouble %= 10;

Console.WriteLine(inputAsDouble);
// prints 7.12

答案 2 :(得分:0)

Modulo是一种非常不同的分割手法。

你能想到的另一种方法是整数除法的剩余部分。

See this SO question and answer

27 / 16 = 1, remainder 11
=> 27 mod 16 = 11 

Wiki Page on Modulo Operations

答案 3 :(得分:0)

N / 100“从数字中删除”数字1和2,然后(N / 100)%10删除第三个数字后的所有数字:

N = ABCDE

N / 100 = ABC 

ABC % 10 = C