【问题标题】:Best way on Java to perform a basic operation with Long [closed]Java 上使用 Long 执行基本操作的最佳方法 [关闭]
【发布时间】:2015-03-10 20:36:40
【问题描述】:

我有一个 10 位数的长整数,我想现在是实施此检查的最佳方法。我会用一个例子来解释它:

如果我们有号码 3456789123:

3 will be multiplied by 10.
4 will be multiplied by 9.
5 will be multiplied by 8.
6 will be multiplied by 7.
...
2 will be multiplied by 2.
The last 3 will be multiplied by 1.

因此,将返回此操作的结果:

(3*10) + (4*9) + ... + (2*2) + (1*1)

这很简单,很直接,创建、数组和乘法,但我正在努力寻找最佳解决方案。

有什么提示吗?

谢谢

【问题讨论】:

  • 我没看懂这个问题,你能举个例子或者更正式地解释一下这个问题吗?
  • 什么重量?单位、十、百?
  • 你的意思是线性组合?
  • 我更新了问题,我不是很清楚,对不起大家
  • 投票重新开放,澄清使问题更加清晰。不知道为什么在澄清问题的编辑半小时后关闭。

标签: java optimization mathematical-optimization


【解决方案1】:
       for (int i = 0; i < 10; i++) { 

           long curr = x % 10  * (i+1);
           x = x / 10;
           System.out.println(curr);
           //do something with curr   
       }

只需重复除以 10 并取最右边的数字,然后将其与当前权重的迭代器相乘。

【讨论】:

  • 如果是 11 位数字?
  • @Vihar 它适用于任何少于 19 位的数字。通过使用BigInteger,它也适用于更大的数字。如果您指的是先验未知的位数(这里不是这种情况) - 例如使用Math.log10(.) 很容易找到。
  • 是的,只是关心 for 循环运行的次数,这看起来有点像硬编码,没关系,一切都很好
  • 请看更新
  • @stackpepe 你在纠结什么?应用上述方法后,除以 11 和取 mod 应该是相当容易的,你不觉得吗?
【解决方案2】:

这可能对你有帮助

long weight=1;
long finalSum=0;
while(number>0){
    long a=number%10;
    finalSum+=(a*weight);
    weight++;
    number/=10;
}
if((finalSum%11)==10){
    System.out.println("Final sum when divided by 11 gives remainder 10");
}

【讨论】:

  • 请看更新
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-15
  • 1970-01-01
  • 2020-01-01
  • 2022-01-12
  • 2010-09-20
相关资源
最近更新 更多