Вычислить обратный корень числа - C (СИ)
Формулировка задачи:
Исходные данные:
Входной поток содержит набор целых чисел Ai (0 ≤ Ai ≤ 1018), отделённых друг от друга произвольным количеством пробелов и переводов строк. Размер входного потока не превышает 256 КБ.
Результат:
Для каждого числа Ai, начиная с последнего и заканчивая первым, в отдельной строке вывести его квадратный корень не менее чем с четырьмя знаками после десятичной точки.
выводит неправильный ответ если ввести 64битные числа
исходные данные:
1427 0
876652098643267843 //c этим числом проблема
5276538
результат:
2297.0716
936297014.1164
0.0000
37.7757
#include <stdio.h> #include <math.h> #define N 4 main() { long int a[N],i; double b[N]; i=0; while (i<N){ scanf("%lld",&a[i]); if (a[i]>=0 && a[i]<=pow(10,18)){ b[i]=sqrt((double)a[i]); ++i; } else break; } if (i==N) for (i=N-1;i>=0;--i) printf("%.4llf\n",b[i]); else printf("Error!"); }
Решение задачи: «Вычислить обратный корень числа»
textual
Листинг программы
#include <iostream> #include <vector> #include <algorithm> #include <iterator> using namespace std; void printSqrt(__int64& _nNum) { cout << "Number: " << _nNum << "\tSqrt: " << sqrt(static_cast<double>(_nNum)) << endl; } int main(int argc, char* argv[]) { vector<__int64> vNumbers; copy(istream_iterator<__int64>(cin), istream_iterator<__int64>(), back_inserter(vNumbers)); for_each(vNumbers.rbegin(), vNumbers.rend(), printSqrt); system("pause"); return EXIT_SUCCESS; }
Объяснение кода листинга программы
В данном коде реализована программа, которая вычисляет квадратный корень для каждого числа, введенного пользователем.
- Включаемые заголовочные файлы:
iostream
- для работы с потоками ввода/вывода;vector
- для работы с векторами;algorithm
- для использования алгоритмов;iterator
- для работы с итераторами.
- Функция
printSqrt
:- Принимает ссылку на число типа
__int64&
в качестве аргумента; - Выводит число и его квадратный корень на экран.
- Принимает ссылку на число типа
- Функция
main
:- Создает пустой вектор типа
__int64
для хранения введенных чисел; - Считывает числа из стандартного ввода и добавляет их в вектор с помощью
copy
иistream_iterator
; - Применяет функцию
printSqrt
к каждому числу в векторе в обратном порядке с помощьюfor_each
иvNumbers.rbegin()
,vNumbers.rend()
.
- Создает пустой вектор типа
- Команда
system(
pause)
:- Отображает окно командной строки, ожидая нажатия клавиши для продолжения работы программы.
- Возвращаемое значение
EXIT_SUCCESS
:- Обозначает успешный конец работы программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д