2015-12-30 3 views
0

я нахожусь в C++, и я получаю эту ошибку:Неверный операнд типов «длинного длинного междунар» в двоичный «оператор%»

bool comprovarCodi(long long num, int DC){ 
bool codi_correcte; 
int i=0, suma_senars=0, suma_parells=0, suma_total=0, desena_superior, DC_calculat, cont=0; 
while(num!=0){ 
    num=num/10; 
    cont++; 
    i++;  
} 
if(cont==12){ 
    for(int j=1; j<12; j=j+2){ 
     suma_senars=suma_senars+num%pow(10,j); 

Я не знаю, почему, я считаю, «номер» является целым числом поэтому я могу использовать оператор «%».

Кто-нибудь знает, почему это не удается?

Спасибо

+4

'pow' возвращает' double', вы не можете применять '%' к 'long long' и' double'. – AlexD

+0

Вам нужно прочитать сообщение об ошибке _whole_, а не только его половину. –

+0

(pow также существует для float и long double, но да, никакого целочисленного типа возврата) – deviantfan

ответ

1

Не используйте pow для такого рода вещи.

long long pow_ten = 10; 
for(int j=1; j<12; j=j+2) 
{ 
    suma_senars=suma_senars+num%pow_ten; 
    pow_ten *= 100; 
} 

Не только это будет быстрее, он будет также правильно рассчитать, а не pow, которые вполне могут использовать что-то вроде exp(log(x) * y) для расчета x ** y - и, таким образом, не всегда придумывают именно номер, который вы хотели - особенно если вы верните его в целое число.

0

вы должны бросить в целое первый
suma_senars = suma_senars + num % (int)pow(10,j);
лучше: suma_senars += num % (int)pow(10,j);
понятнее: suma_senars += num % ((int)pow(10,j));

+0

На самом деле, я думаю, что ваша более четкая линия менее понятна, чем ваша лучшая линия - лишние лишние круглые скобки обычно усложняют чтение IMO. –

+0

Отличный человек, он отлично работает. Большое спасибо – user3894819

+2

Плохая идея, так как вы можете легко получить неожиданный результат из-за разрезания плавающей части. '(int) 9.9999'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ' В общем, как сказал ** @ Mats **, не используйте 'pow' в таких сценариях. – AlexD

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