2015-03-10 4 views
-1

У меня есть длинное число из 10 цифр, и я хочу, чтобы теперь лучший способ реализовать эту проверку. Я объясню это на примере:Лучший способ Java выполнить базовую операцию с Long

Если мы имеем номер 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) 

Это довольно простой в простой способ, создание и массив и умножение, но я пытаюсь найти лучшее решение.

Подсказка?

Благодаря

+3

Я не понимаю вопрос, можете ли вы привести пример или объяснить вопрос более формально? – amit

+1

какие веса? единицы, десятки, сотни? – Vihar

+1

Вы имеете в виду линейную комбинацию? – runDOSrun

ответ

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"); 
} 
+0

Пожалуйста, ознакомьтесь с обновлением –

3
 for (int i = 0; i < 10; i++) { 

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

Просто repeatidly разделить на 10 и взять самый правый разряд, и умножить его итератора текущего веса.

+0

в случае 11 цифр? – Vihar

+0

@Vihar Он работает для любого номера с числом символов менее 19. Используя «BigInteger», он работает и для еще больших чисел. Если вы говорите, что число цифр неизвестно apriori (это не так) - довольно легко найти это, используя, например, 'Math.log10 (.)'. – amit

+0

Да, конечно, был просто обеспокоен количеством циклов для циклов, которые выглядят немного как жесткое кодирование, неважно, все хорошо. – Vihar

Смежные вопросы