jatinp510 Ответов: 2

Как взять мод для двойного типа данных в C


я хочу взять мод двойного типа данных, чтобы проверить, является ли он четным или нет.

Что я уже пробовал:

СРИ за это...
#include <stdio.h>

 
int main()
{
     long n;
    scanf("%d",&n);
    while(n--){
        double g;
        scanf("%d",&g);
        if(((int)g)%2==0)
        printf("YES\n");
        else
        printf("NO\n");
        
    }
}

Ограничения
1<=n<=100000
1<=g<=10^100

здесь n - это нет. из теста
а G-нет. чтобы проверить, ровный он или нет.
сирр, это не работает.

jeron1

Является ли ограничение для g правильным, от 10 до 100-й степени?

CPallini

Как джерон1 заметьте, вы не можете держать такие большие числа в двойной переменной.

jatinp510

какой тип данных я должен использовать, чтобы сохранить значение для 10^100.

jeron1

Вам понадобится что-то вроде GitHub-sercantutar/infint: целочисленная арифметика произвольной точности[^] (Я не использовал его лично, поэтому не знаю, насколько хорошо он работает). Вы можете погуглить "c++ bigint" и посмотреть, что получится.

2 Ответов

Рейтинг:
8

CPallini

Двойники не являются четными или нечетными (они имеют почти нулевую вероятность). Вы должны преобразовать их в целые числа. То, как вы это делаете, может повлиять на результат: вы можете выбрать, например, усечение двойного значения (как Грифф предложил) или обогнуть его.


Рейтинг:
16

OriginalGriff

Преобразуйте его в int путем приведения и используйте оператор целочисленного модуля "%":

if (((int) myDouble) % 2 == 0)
   {
   // It's even.
   ...


И кстати: не ругайтесь больше на этом сайте: это было ненужно, непрофессионально и нежелательно. Сделайте это еще раз, и с вами будут обращаться как с троллем и забанят с сайта.


jatinp510

СРИ за это...

#include < stdio.h>


тап_п()
{
долго Н;
scanf ("%d",& n);
в то время как(n--){
двойной g;
scanf ("%d",& g);
если (((int)g)%2==0)
printf ("YES\n");
еще
printf ("NO\n");

}
}
Ограничения
1<=n<=100000
1<=g<=10^100

здесь n - это нет. из теста
а G-нет. чтобы проверить, ровный он или нет.
сирр, это не работает.

Jochen Arndt

Ошибка находится на

scanf("%d",&g);

Вы читаете int и храните его в ячейке памяти для double.
Воспользуйся
scanf("%lf",&g);

вместо этого сказать scanf, что он должен преобразовать двойник.

jatinp510

ОН ВСЕ ЕЩЕ НЕ РАБОТАЕТ

OriginalGriff

НЕ КРИЧИ. Использование всех заглавных букв считается криком в интернете и грубостью (использование всех строчных букв считается ребячеством). Используйте правильную капитализацию, если хотите, чтобы вас воспринимали всерьез.

jatinp510

Окей. :)

jatinp510

дайте мне несколько советов