真的在试图理解模数时绞尽脑汁。
这是一个练习题及其指导原则。 这是我的运动问题:
写一个表达式,如果第三个数字,则查找给定的整数 (从右到左)是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)所以我理解这一点。
答案 0 :(得分:3)
712 / 100
不是7.12
。它是7
。如果您将7
除以10
,那么您将获得0
。如果你将模数7 % 10
,你会得到7
,因为它是除7/10
之外的其余部分。除法总是向下舍入到完整的十进制值,没有休息。这就是模数运算符的用途,您需要单独评估它们。
示例:
您的输入为12345
。 12345/100
为您提供了123
,因为您在输入中有123 full hundrets
。然后123/10
会给你12
,因为12 full tens
中有123
而123%10
会3
给你123/10
(这是你的号码')重新寻找),因为剩下的就是划分float
。
如果你需要在school-math类型中进行除法,请使用浮点类型,例如double
或12345f/100
。 F.E. 123.45f
会给你大约{{1}}。
答案 1 :(得分:1)
此处的问题实际上与C# %
运算符无关。
这是因为您使用int
与double
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
答案 3 :(得分:0)
N / 100“从数字中删除”数字1和2,然后(N / 100)%10删除第三个数字后的所有数字:
N = ABCDE
N / 100 = ABC
ABC % 10 = C