我不明白如何解决老师给我的问题。
给出数字N(0 <= N <= 100),找到其第一个数字。
例如:
input: 100
result: 1
input: 46
result: 4
input: 3
result: 3
一开始似乎很容易,但是(如老师所说)应该使用 ONLY 整数数据类型(换句话说,使用+
,-
, *
,/
和%
运算符)。甚至有可能这样做吗?
如果不使用log10,条件,“ while”循环或字符串转换之类的东西,我只是不知道如何从可变长度数字中提取第一位数字。
答案 0 :(得分:10)
没有任何条件:
int H= N / 100; // Hundreds digit
int T= (N / 10) % 10; // Tens digit
int U= N % 10; // Units digit
int h= H; // Hundreds flag
int t= (T + 9) / 10 * (1 - h); // Tens flag
int u= (1 - t) * (1 - h); // Units flag
int Answer= u * U + t * T + h * H; // Combination
答案 1 :(得分:5)
编辑:现在已测试0和100:
var result = n / 10 * (1 - n / 100) + n / 100 + (109 - n) / 100 * n;
工作原理:
n | n / 10 * (1 - n / 100) | n / 100 | (109 - n) / 100 * n ----------------------------------------------------------------- 10 - 99 | 1 - 9 | 0 | 0 ----------------------------------------------------------------- 100 | 0 | 1 | 0 ----------------------------------------------------------------- 0 - 9 | 0 | 0 | 0 - 9
答案 2 :(得分:2)
使用while循环,并保持输入数字除以10,只要我们开始的值是更大等于或等于10。当修改的输入小于10时,则表示我们已经除去了除“第一个”数字之外的所有数字。
int input = 100;
while (input >= 10)
{
input /= 10;
}
Console.WriteLine("First digit is: {0}", input);
答案 3 :(得分:1)
这是一个非通用的响应,仅适用于域受限的情况。这样做的目的是返回所有被混淆在一起的数字(百位,十位和一个)。”对特定范围的数字的一些思考:
100很容易,因为十和一的单位均为零。没有其他三位数,这是很好的,因为任何位置不为零或十的东西都会在下面引起问题。
所有小于100的数字都可以在响应中包含百位数,因为它始终为零。
10的倍数很容易,只需加上百分之十和一个值,因为其他数字为零。
棘手的部分是一个人的位置。如果应该返回较大的数字,则需要一种方法来“取消”该值。例如,我们想要87,但要取消7。
这导致了想法
0.001
发生的事情是,每当十位不为零时,上面的值将为零。因此,当十位数不为零时,我们可以将其位数乘以零。但是,当十位为零时会出现问题。在这种情况下,我们相差9倍! (9阶乘= 362880)和错误的符号。这就是为什么要包含一个额外的减号,并在十位为零时除以362880以获得正确答案的原因。
0.024
检查
(ten - 9)*(ten - 8)*(ten - 7)*(ten - 6)*(ten - 5)*(ten - 4)*(ten - 3)*(ten - 2)*(ten - 1)
答案 4 :(得分:0)
static int Result(int input)
{
return input/100 + (input%100/input)*input/10 + (input%10/input)*input;
}
input/100
仅在input
等于100时返回1,否则返回0 (input%100/input)
将仅在input < 100
时返回1,否则返回0
input
小于10,则input/10
将为0 (input%10/input)
仅在input < 10
时返回1,否则返回0 如果input == 0
,请参见@quanik's answer来处理0,这会中断。
但是,它将适用于1-999。
答案 5 :(得分:0)
我试图解决此案,但没有成功, 如果N为1-100,我只能找到第一个数字。 这是我的源代码。希望能帮助到你 https://dotnetfiddle.net/6XyOfd
答案 6 :(得分:-1)
if (N < 10)
Output(N)
else if (N < 100)
Output(N / 10)
else
Output(1)