所以我已经待了几个小时了,老实说我完全陷入了困境。我编写了一个for循环,用于计算整数中的数量,但是我发现,一旦输入10位数以上的数字,除数的值就会改变,而且我不知道为什么。我搜索互联网无济于事,因此如果您有任何帮助或提示,我将不胜感激。谢谢!
def forward(self, batch, method='last_step'):
embeds = self.word_embeddings(batch)
x = torch.transpose(embeds, 0, 1)
x, self.hidden = self.gru(x, self.hidden)
if method == 'last_step':
x = x[-1]
elif method == 'average_pooling':
x = torch.sum(x, dim=0) / len(batch[0])
elif method == 'max_pooling':
x, _ = torch.max(x, dim=0)
else:
raise Exception('Unknown method.')
# A series of Linear layers with ReLU and Dropout
for l in self.linears:
x = l(x)
log_probs = F.log_softmax(x, dim=1)
return log_probs
答案 0 :(得分:1)
int
不能容纳大于2,147,483,647的数字。您需要坚持使用long
来处理更大的数字。
答案 1 :(得分:1)
整数最多只能容纳2 ^ 32-1。此外,为什么将输入参数强制转换为整数?
另一件事是,由于从0一直循环到creditCardNumber
中的for(int i = 0; i <= creditCardNumber; i++){ ... }
,因此您要计算导致除数的每个数字的位数。因此,例如10000会返回1中的位数,2中的位数一直到10000。
最后,整个功能可以通过
一行完成return Long.toString(creditCardNumber).length();
或
return creditCardNumber.toString().length();
如果将creditCardNumber
更改为Long
而不是long
,但是您必须使用结尾处的后缀l
来调用它。
如果您想要更短的东西,可以做
return (creditCardNumber+"").length();
答案 2 :(得分:0)
当数字大于10位时,由于整数不能容纳大于2 ^ 31-1或2,147,483,647(即只有10位数字的数字)的值,因此无法完成对整数的转换。我建议坚持使用long
。