Продукт всех элементов массива по модулю 10 ^ 9 + 7 [дубликат]

== сравнивает ссылки на объекты в Java и не является исключением для объектов String.

Для сравнения фактического содержимого объектов (в том числе String) необходимо использовать equals.

Если сравнение двух объектов String с использованием == оказывается true, это связано с тем, что объекты String были интернированы, а виртуальная машина Java имеет несколько ссылки указывают на тот же экземпляр String. Не следует ожидать сравнения одного объекта String, содержащего то же содержимое, что и другой объект String, используя == для оценки как true.

44
задан johnnyRose 8 January 2018 в 22:37
поделиться

7 ответов

Хорошо, во-первых, оператор ^ в C / C ++ является бит-мутным XOR.

Теперь, что касается вашей проблемы с использованием функции pow(), , некоторые googling показывают, что приведение одного из аргументов в double помогает:

result = (int) pow((double) a,i);

Обратите внимание, что я также передал результат в int, так как все перегрузки pow() возвращаются дважды, а не int. У меня нет компилятора MS, поэтому я не мог проверить вышеописанный код.

Поскольку C99, существуют также функции float и long double, называемые powf и powl соответственно , если это какая-либо помощь.

64
ответ дан Sergey Tachenov 15 August 2018 в 19:59
поделиться

включить math.h и скомпилировать с помощью gcc test.c -lm

1
ответ дан anup 15 August 2018 в 19:59
поделиться
  • 1
    Я боюсь, что OP не использует GCC. :-( – peoro 30 January 2011 в 15:15
  • 2
    что такое GCC AND test.c -lm? – Abid Ali 30 January 2011 в 15:19
  • 3
    @Abid: какой компилятор вы используете? – anup 30 January 2011 в 15:19
  • 4
    @peoro, смешно, что он отлично работает в GCC. Это бьет меня, почему это не работает с MS-компилятором. – Sergey Tachenov 30 January 2011 в 15:21
  • 5
    @Sergey Tachenov: соглашайтесь с вами: прочитайте мой последний комментарий к моему ответу. – peoro 30 January 2011 в 15:23

Вместо использования ^ используйте функцию «pow», которая является предопределенной функцией, которая выполняет операцию Power, и ее можно использовать, включив заголовочный файл math.h.

^ Этот символ выполняет операцию BIT-WISE XOR в C, C ++.

Замените a^i на pow(a,i).

-3
ответ дан Artjom B. 15 August 2018 в 19:59
поделиться
  • 1
    Как это добавляет что-то новое в существующие ответы более трех лет? – Artjom B. 3 August 2014 в 21:28
  • 2
    Хотя мы благодарим вас за ваш ответ, было бы лучше, если бы оно обеспечило дополнительную ценность поверх других ответов. В этом случае ваш ответ не дает дополнительного значения, поскольку другой пользователь уже опубликовал это решение. Если предыдущий ответ был полезен для вас, вы должны проголосовать за него вместо повторения той же информации. – Toby Speight 3 May 2017 в 16:14

pow () не работает с int, поэтому ошибка «ошибка C2668:« pow »: неоднозначный вызов перегруженной функции»

http: //www.cplusplus. com / reference / clibrary / cmath / pow /

Напишите свою собственную функцию питания для int s:

int power(int base, int exp)
{
    int result = 1;
    while(exp) { result *= base; exp--; }
    return result;
}
6
ответ дан Max 15 August 2018 в 19:59
поделиться
  • 1
    int s должен автоматически повышаться до double s, не так ли? Во всяком случае, ваша ссылка о C ++. – peoro 30 January 2011 в 15:32
  • 2
    Поскольку эта функция принимает поплавки и удваивает, когда вы вызываете ее с помощью ints, она не знает, к какому типу она должна продвигать int. – Max 30 January 2011 в 15:34
  • 3
    «В любом случае, ваша ссылка о C ++». Но плакат использует компилятор C ++, так как он имеет ошибку из-за перегрузки. – Max 30 January 2011 в 15:35
  • 4
    Это субоптимально несколькими способами. Сначала вы собираетесь запустить цикл число раз, указанное в exp. В зависимости от размера int это может быть довольно много. Однако наибольший показатель, который имеет смысл, равен pow (2, sizeof (int) * CHAR_BIT-1). Но есть больше возможностей для улучшения. pow (x, y) == pow (2, n) * pow (x ', r). Термин pow (2, n) может быть реализован простым сдвигом бит на n. Определение x 'и r может быть быстрее, чем повторение этого цикла. – datenwolf 30 January 2011 в 16:08
  • 5
    В качестве примера я привел простейшую реализацию, как показано в учебниках алгоритмов. – Max 30 January 2011 в 16:12

Вы действительно должны использовать pow (число, мощность) ;. К сожалению, караты не работают как силовой знак в C. Много раз, если вы не можете что-то сделать с другого языка, это потому, что для вас есть различная функция, которая делает это для вас.

1
ответ дан Nick Anderegg 15 August 2018 в 19:59
поделиться
  • 1
    Carets do & quot; work & quot ;, они просто не делают того, что вы можете ожидать от них. – user 30 January 2011 в 15:08
  • 2
    Ну, они не работают на власть, для этого нужна функция. Но пользователь, который задал вопрос, сказал, что его каретка не работает, на что я ответил, что определенная методология не работает в C. Но верная точка, я отредактирую. – Nick Anderegg 30 January 2011 в 15:11
  • 3
    @paxdiablo Я отредактировал его с тех пор. – Nick Anderegg 30 January 2011 в 20:06

Прежде всего ^ является Побитовым оператором XOR не силовым оператором.

Вы можете использовать другие вещи для поиска мощности любого числа. Вы можете использовать для цикла, чтобы найти мощность любого числа

. Вот программа для поиска x ^ y ie xy

double i, x, y, pow;

x = 2;
y = 5; 
pow = 1;
for(i=1; i<=y; i++)
{
    pow = pow * x;
}

printf("2^5 = %lf", pow);

Вы также можете просто используйте функцию pow () для поиска мощности любого числа

double power, x, y;
x = 2;
y = 5;
power = pow(x, y); /* include math.h header file */

printf("2^5 = %lf", power);
3
ответ дан Pankaj Prakash 15 August 2018 в 19:59
поделиться

В C ^ есть побитовая XOR:

0101 ^ 1100 = 1001 // in binary

Для питания нет оператора, вам нужно будет использовать функцию pow из math.h (или какой-либо другой подобной функции):

result = pow( a, i );
59
ответ дан peoro 15 August 2018 в 19:59
поделиться
  • 1
    Я использовал эту функцию .. но: / она дает ошибку, которая неоднозначно вызывает перегруженную функцию. – Abid Ali 30 January 2011 в 15:05
  • 2
    @Abid Ali: вам нужно включить math.h. Поместите эту строку в начало файла: #include <math.h> – peoro 30 January 2011 в 15:09
  • 3
    @Abid Ali: program , которую вы используете для написания и компиляции кода C, не соответствует стандарту C: он не может скомпилировать действительный код C. Не знаю, почему. Я бы предложил вам перейти на более стандартный компилятор. Если вы используете Windows, попробуйте загрузить и написать свои программы в Dev-C ++ (например), который использует GCC в качестве компилятора. Невозможно помочь выяснить, почему этот код не работает с студией microsoft. – peoro 30 January 2011 в 15:31
  • 4
    @peoro, перегруженные макросы? Макросы не печатаются, они принимают что угодно. И C не может иметь перегруженных функций, так как нет никакого имени. Из-за ошибки некоторые поисковые запросы показывают, что обходным путем является включение одного из аргументов в double, как (int) pow((double) a,i) - я тоже выдал результат, поскольку он возвращает double, а не int. – Sergey Tachenov 30 January 2011 в 15:33
  • 5
    @Abid Ali: попробуйте заменить эту строку следующим: pow( (double)a, (double)i ); – peoro 30 January 2011 в 15:37
Другие вопросы по тегам:

Похожие вопросы: