Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Помогите мне на языке C

ArtemCNasmBIOSInfOS Профи (570), закрыт 2 недели назад
Мне нужно перевести Unix time в годы (например: 2000000000) чтобы года были верными.
 int second = 2000000000;
int year = (second /* нужно сделать какую-то операцию чтобы перевести Unix time в года*/);
Но можно использовать только - + / % (остаток при деления) и возможно даже sizeof.
Лучший ответ
speexz Мыслитель (7584) 2 недели назад
Вот код:
#include <stdio.h>

int main() {
int second = 2000000000;
int year = 1970;

while (second >= 31536000) { // Пока секунд хватает хотя бы на один обычный год
int days_in_year = 365;

// Проверяем, високосный ли год
if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) {
days_in_year = 366; // Високосный год
}

int seconds_in_year = days_in_year * 24 * 60 * 60;

// Если секунд достаточно для ещё одного года, отнимаем их
if (second >= seconds_in_year) {
second -= seconds_in_year;
year++;
} else {
break;
}
}

printf("Year: %d\n", year);
return 0;
}


### Как это работает:
1. Начинаем с `1970` года.
2. В цикле проверяем, високосный ли текущий год (`366` дней) или обычный (`365` дней).
3. Вычитаем соответствующее количество секунд.
4. Повторяем, пока секунд не останется меньше, чем в одном полном году.
5. Выводим итоговый год.

### Проверка:
Для `2000000000` секунд результат:
 Year: 2033 

Этот способ проще, понятнее и работает точно. ?
Остальные ответы
Кто то Знаток (453) 2 недели назад
уф, ёбана... Мой уровень это print("Hello world")
Malenkiuprinter Kpachemokoc Профи (932) 2 недели назад
 #include <stdio.h> 

int main() {
int second = 2000000000; // Пример: 2 миллиарда секунд

// Приближённо: 1 год = 31,536,000 секунд (365 дней), без високосных для простоты
// Вычисляем через деление: 365 * 24 * 60 * 60 = 31,536,000
// Но используем только базовые операции, строим число постепенно:
int sec_in_day = 24 * 60 * 60; // 86,400 секунд в дне
int sec_in_year = sec_in_day * 365; // 31,536,000 секунд в году (упрощённо)

int years_since_1970 = second / sec_in_year; // Полные годы с 1970
int year = 1970 + years_since_1970; // Добавляем начальный год

printf("Year: %d\n", year); // Вывод результата
return 0;
}
Moon Late Мастер (2293) 2 недели назад
Сколько секунд в году знаешь? Ну вот. Осталось посчитать число високосных годов с 1 янв. 1970 года.
Что такое bis sextus знаешь? Ну вот.
Хотя, есть стандартная функция из стандартной библиотеки time.h

Ааа, так ты долбак? Ну так бы и сказал сразу, что думать не умеешь. Тупой турбоящер
Vov4ik Мастер (2268) 2 недели назад
Смотрите описание файла time.h, типа time_t и функции time из него.
Николай Веселуха Высший разум (377956) 2 недели назад
 #include <iostream> 
using namespace std;
int main() {
constexpr auto year = 31557600U;
constexpr auto unix = 1970U;
constexpr auto second = 2000000000U;
constexpr auto years = unix + second / year;
cout << years << '\n';
}
Moon LateМастер (2293) 2 недели назад
Чел попросил на языке Си, а ты ему constexpr auto и перегрузки операторов суешь.
Вообще, в Си есть стандартная библиотека time для перевода времени
Николай Веселуха Высший разум (377956) Moon Late, согласен, исправляю
 #include <stdio.h>  
int main(void) {  
    int y = 31557600;  
    int u = 1970;  
    int second = 2000000000;  
    u += second / y;  
    printf("%i\n", u);  
} 
Moon LateМастер (2293) 2 недели назад
Ну и bis sextus учитывать надо тоже. В прошлом году был как раз такой "дважды шестой".
Николай Веселуха Высший разум (377956) Moon Late, у меня год в программе равен 365.25 суток, и этого, вполне достаточно.
Похожие вопросы