[英]How to get input using the left-shift-bitwise operator?
#include<stdio.h>
long scan()
{
long int t = 0;
char c;
c = getchar_unlocked();
while (c < '0' || c>'9')
c = getchar_unlocked();
while (c >= '0' && c <= '9')
{
**t = (t << 3) + (t << 1) + c - '0'; **
c = getchar_unlocked();
}
return(t);
}
int main()
{
int t, a[110], n, i; long long int c, sum;
t = scan();
while (t--)
{
sum = 0;
scanf("%d%lld", &n, &c);
for (i = 0; i < n; i++)
{
a[i] = scan();
sum += a[i];
}
if (sum <= c)
printf("Yes\n");
else
printf("No\n");
}
return 0;
}
请帮助我理解“**”中的行。 我知道左移运算符 n 将数字乘以 2^n。 所以 t 首先乘以 8,然后乘以 2。但这如何帮助我们获得输入?
scan() 函数获取输入并返回它。
您用星号指示的行无助于获取输入,它所做的只是根据c
的当前值更新变量t
的值。
调用getchar_unlocked()从 stdin 获取下一个字符并返回它,程序将该值存储在变量c
。
程序期望字符是数字 ASCII 数字,因此(c-'0')
的计算值将介于 0 和 9 之间。 对于这些值中的每一个,它等效于t = (t*8) + (t*2) + the_computed_value;
——我不确定它的意图是什么,但这就是它正在做的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.