Warning: integer constant is too large for "long" type - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Можете пояснить и написать, что нужно сделать в коде, чтобы компилятор не выдавал следующие предупреждения: warning: integer constant is too large for "long" type; warning: comparison is always true due to limited range of data type.
#include<stdio.h>
 
main (void)
{
    long int i, l;
    
    printf("Vvedite dvoichnoe chsislo: ");
    scanf("%d", &i);
    
    if(i==0 || i==1)
        {
            l=i*1;
            printf("Chislo %d v desyatichnoy forme: %d\n", i, l);
        }
    if(i>=10 && i<100)
        {
            l=(i%10)*1+(i-i%10)/10;
            printf("Chislo %d v desyatichnoy forme: %d\n", i, l);
        }
    if(i>=100 && i<1000)
        {
            l=(i%10)*1+((i%100-i%10)/10)*2+((i-i%100)/100)*4;
            printf("Chislo %d v desyatichnoy forme: %d\n", i, l);
        }
    if(i>=1000 && i<10000)
        {
            l=(i%10)*1+((i%100-i%10)/10)*2+((i%1000-i%100)/100)*4+((i-i%1000)/1000)*8;
            printf("Chislo %d v desyatichnoy forme: %d\n", i, l);
        }
    if(i>=10000 && i<100000)
        {
            l=(i%10)*1+((i%100-i%10)/10)*2+((i%1000-i%100)/100)*4+((i%10000-i%1000)/1000)*8;
            l=l+((i-i%10000)/10000)*16;
            printf("Chislo %d v desyatichnoy forme: %d\n", i, l);
        }
    if(i>=100000 && i<1000000)
        {
            l=(i%10)*1+((i%100-i%10)/10)*2+((i%1000-i%100)/100)*4+((i%10000-i%1000)/1000)*8;
            l=l+((i%100000-i%10000)/10000)*16+((i-i%100000)/100000)*32; 
            printf("Chislo %d v desyatichnoy forme: %d\n", i, l);
        }
    if(i>=1000000 && i<10000000)
        {
            l=(i%10)*1+((i%100-i%10)/10)*2+((i%1000-i%100)/100)*4+((i%10000-i%1000)/1000)*8;
            l=l+((i%100000-i%10000)/10000)*16+((i%1000000-i%100000)/100000)*32;
            l=l+((i-i%1000000)/1000000)*64;
            printf("Chislo %d v desyatichnoy forme: %d\n", i, l);
        }
    if(i>=10000000 && i<100000000)
        {
            l=(i%10)*1+((i%100-i%10)/10)*2+((i%1000-i%100)/100)*4+((i%10000-i%1000)/1000)*8;
            l=l+((i%100000-i%10000)/10000)*16+((i%1000000-i%100000)/100000)*32;
            l=l+((i%10000000-i%1000000)/1000000)*64+((i-i%10000000)/10000000)*128;
            printf("Chislo %d v desyatichnoy forme: %d\n", i, l);
        }
    if(i>=100000000 && i<1000000000)
        {
            l=(i%10)*1+((i%100-i%10)/10)*2+((i%1000-i%100)/100)*4+((i%10000-i%1000)/1000)*8;
            l=l+((i%100000-i%10000)/10000)*16+((i%1000000-i%100000)/100000)*32;
            l=l+((i%10000000-i%1000000)/1000000)*64+((i%100000000-i%10000000)/10000000)*128;
            l=l+((i-i%100000000)/100000000)*256;
            printf("Chislo %d v desyatichnoy forme: %d\n", i, l);   
        }
    if(i>=1000000000 && i<10000000000)
        {
            l=(i%10)*1+((i%100-i%10)/10)*2+((i%1000-i%100)/100)*4+((i%10000-i%1000)/1000)*8;
            l=l+((i%100000-i%10000)/10000)*16+((i%1000000-i%100000)/100000)*32;
            l=l+((i%10000000-i%1000000)/1000000)*64+((i%100000000-i%10000000)/10000000)*128;
            l=l+((i%1000000000-i%100000000)/100000000)*256+((i-i%1000000000)/1000000000)*512;
            printf("Chislo %d v desyatichnoy forme: %d\n", i, l);
        }
    printf("\n");
        
    return 0;
}

Решение задачи: «Warning: integer constant is too large for "long" type»

textual
Листинг программы
int ConvertToDecimal(int number)
{
    int count = 0, result = 0;
    do
    {
        int mod = number % 10;
        result += pow(2, count)*mod; 
        count++;
        number /= 10;
    }while(number);
    return result;
}

Объяснение кода листинга программы

  1. В функции ConvertToDecimal приведена реализация алгоритма преобразования числа из двоичной системы счисления в десятичную.
  2. Переменная count инициализируется значением 0 и используется для подсчёта количества цифр в числе, которое будет преобразовано.
  3. Переменная result инициализируется значением 0 и используется для хранения результата преобразования.
  4. В цикле do-while происходит последовательное преобразование каждой цифры числа в двоичную систему счисления с помощью операции остатка от деления % и последующим добавлением полученного значения в переменную result.
  5. Переменная count увеличивается на единицу после каждой итерации цикла.
  6. Переменная number делится на 10 после каждой итерации цикла.
  7. Цикл выполняется до тех пор, пока число number не станет равным нулю.
  8. Функция возвращает результат преобразования в виде десятичного числа.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 4.214 из 5