Вычислить обратный корень числа - 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:- Обозначает успешный конец работы программы.