0 / 0 / 0
Регистрация: 26.09.2013
Сообщений: 15

Калькулятор длинных чисел

12.10.2013, 22:33. Показов 7828. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день!
Кто может подсказать, в чем трабла или хотя бы где поискать ответ?
В примере только вычитание!!!
Проблема в том, что цифры больше 16 знаков отображаются и считаются неверно.
Просмотрел, много онлайн калькуляторов - та же проблема.
например:
11111111111111111 - 1 = 11111111111111112
(должно быть 11111111111111110)

111111111111111111 - = 111111111111111100
(должно быть 111111111111111110)

Например, вот здесь так считает http://shpargalkablog.ru/2012/... mosti.html
или этот http://www.kalkulyator.info/

Заранее спасибо за ответ!
Ниже код.


HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
<!DOCTYPE>
<html>
<head>
   <title>Home</title>
   <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
   
</head>
 
<!-- Стили -->
   <style>
      body
      {
      font-family: Verdana; /*Шрифт для все страницы. Font for all page's objekts*/
      }
 
      fieldset
      {
      width: 800px; 
      margin: 30px auto; /*Для позиционирования поля на странице. For fied position*/ 
      padding: 10px 30px; /*Внутренний отступ поля. Padding field*/
      }
 
      form p
      {
      text-align: right; /*Выравнивание обзацев внутри поля по правому краю*/
      }
 
      input
      {
      width: 630px; /*Размеры форм ввода цифр*/
      height: 30px;
      margin-left: 20px;  /*Отступ поля ввода от текста*/
      text-align: right; /*Выравнивание содержимого форм ввода по правому краю*/
      }
   </style>
 
<!-- Поле для ввода данных -->
   <fieldset> 
      <form name="mainForm">
         <h4>Вычитание длинных чисел</h4>
         <p>Первое число<input name="firstNumber" placeholder="Введите уменьшаемое" pattern="\d+"></p> <!-- Поле для ввода уменьшаемого -->
         <p>-</p>
         <p>Второе число<input name="secondNumber" placeholder="Введите вычитаемое"pattern="\d+"></p> <!-- Поле для ввода вычитаемого -->
         <p>=</p>
         <p>Результат<input name="result"></input></p> <!-- Поле отображения результата -->
      </form>
   </fieldset>
 
<!-- Инструкция    -->
   <h3>Инструкция по использованию</h3>
   <p>Для получения результата необходимо вводить только положительные числа.</p>
   <p>Введите уменьшаемое в поле ввода "Первое число".</p>
   <p>Введите вычитаемое в поле ввода "Второе число".</p>
   <p>Результат должен отобразиться в поле "Результат" в течение нескольких секунд.</p>
   
 
   <script type="text/javascript" src="scripts/calc.js"></script>
 
<body>
 
</body>
</html>
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
setInterval (function () {
   minuend = parseInt(mainForm.firstNumber.value); // Получаем уменьшаемое
   deduction = parseInt(mainForm.secondNumber.value); // Получаем вычитаемое
 
   if(isNaN(minuend) || isNaN(deduction) || minuend < 0 || deduction < 0) { //указываем условие: инструкция не выполняется при условии если в поля вводятся отрицательные значения, либо не цифры  
   falseInput = "" // при выполнении этого условия поле "Результат остается пустым" 
   document.mainForm.result.value = falseInput;
   }
   else{ // в ином случае
   difference = minuend - deduction;   // производится вычитание
   document.mainForm.result.value = difference; //  вывод разности
   }
}, 100);  //Количество миллисекунд, необходимое для вывода результата
Добавлено через 6 часов 38 минут
Или даже проще:
Как заставить отобразиться число соответственно коду(ниже)?
И можно ли это сделать? Ну, естественно, вариант просто поставить кавычки не подойдет! ))))
На данный момент отображается как 11111111111111112.
Я уже прочитал про особенности памяти и с чем это все связано, мне интересно решение.
Есть ли оно?

HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<!DOCTYPE>
<html>
<head>
   <title>Home</title>
   <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
   
</head>
<body>
   <script type="text/javascript">
 
      a = 11111111111111111;
      document.write(a);
 
   </script>
</body>
</html>
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
12.10.2013, 22:33
Ответы с готовыми решениями:

Калькулятор длинных чисел
Ребят, учусь на 1 курсе. Задача - написать калькулятор длинных чисел (Больше лонга). Я не представляю, как это сделать. А препод шарит ещё...

калькулятор для длинных чисел на с#
срочно нужно написать калькулятор для длинных чисел(+,-,*,/,хранение числа,факториал). помогите плз.

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

10
69 / 69 / 22
Регистрация: 06.06.2013
Сообщений: 404
12.10.2013, 22:46
думаю если б было решение, его давно бы уже внедрили
1
388 / 275 / 76
Регистрация: 19.09.2011
Сообщений: 828
13.10.2013, 01:18
dsptd, BigInt.

JavaScript
1
2
3
4
5
var base = 10;
var op1 = str2bigInt("11111111111111111", base);
var op2 = int2bigInt(1, base);
var result = sub(op1, op2);
console.log(bigInt2str(result, base));
1
0 / 0 / 0
Регистрация: 26.09.2013
Сообщений: 15
13.10.2013, 06:10  [ТС]
Ну да есть и библиотека "больших целых", но опять же я выше указывал, что вариант просто заключить кавычки не пойдет. Объяснение оч простое - использование в калькуляторе: я ведь все равно запрашиваю у пользователя цифры, и уже на этом этапе произойдет погрешность, даже если я сразу применю toString(), эта строка уже будет с двойкой на конце.
Есть еще у кого мысли?
0
33 / 33 / 6
Регистрация: 14.03.2013
Сообщений: 89
13.10.2013, 10:20
Получаем число от пользователя преобразуем к строке, делим строку на части в зависимости от длины строки и от длины, поделенные части преобразуем к числу, прибавляем, опять преобразуем к строке, выводим результат.

Как вам такой алгоритм?
JavaScript
1
2
3
4
5
6
7
    "use strict";
    var a = "11111111111111111";
    var d = a.slice(0,5)+'';
    var c = a.slice(5);
    c = +c+1;
    a = d + c;
    console.log (a);
1
0 / 0 / 0
Регистрация: 26.09.2013
Сообщений: 15
13.10.2013, 10:36  [ТС]
Спасибо всем за ответы, но проблема как была в самом начале, так она так и запрятана.
Я не смогу при каждом вводе числа пользователем заходить в код и ручками править число в строку кавычками.
Если я буду преобразовывать число из семнадцати единиц (и более) при помощи функции String() или метода .toString(), то полученная строка уже будет содержать погрешность.
Основная соль задачи в самом начале.
КАК ПРЕОБРАЗОВАТЬ ЧИСЛО БОЛЬШЕ 17 ЕДИНИЦ В СООТВЕТСТВУЮЩУЮ СТРОКУ?
0
33 / 33 / 6
Регистрация: 14.03.2013
Сообщений: 89
13.10.2013, 10:41
JavaScript
1
2
3
var number  = prompt('Enter a number!','');
    number =  number  + ''; // Вот число стало стрококй
    number = +number; // Теперь оно опять число
0
0 / 0 / 0
Регистрация: 26.09.2013
Сообщений: 15
13.10.2013, 10:52  [ТС]
Я начинаю сильно любить Python! ))))

Добавлено через 9 минут

Добавлено через 1 минуту
Цитата Сообщение от alokazay Посмотреть сообщение
prompt('Enter a nu
Да, но попробуйте запустить этот файл и введите семнадцать единиц.
Я добавил только вывод на экран результата к Вашему коду.
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<!DOCTYPE>
<html>
<head>
   <title>Home</title>
   <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
   
</head>
 
<body>
 
   <script type="text/javascript">
      var number  = prompt('Enter a number!','');
      number =  number  + ''; // Вот число стало стрококй
      number = +number; // Теперь оно опять число
      document.write(number);
   </script>
 
<body>
 
</body>
</html>
0
33 / 33 / 6
Регистрация: 14.03.2013
Сообщений: 89
13.10.2013, 12:08
Ну конечно не будет работать,
JavaScript
1
2
3
4
 "use strict";
 
    var number  = prompt('Enter a number!','');// Вот число стало стрококй
    document.write(number+'--'+number.length);
0
388 / 275 / 76
Регистрация: 19.09.2011
Сообщений: 828
13.10.2013, 13:38
Цитата Сообщение от dsptd Посмотреть сообщение
Спасибо всем за ответы, но проблема как была в самом начале, так она так и запрятана.
Я не смогу при каждом вводе числа пользователем заходить в код и ручками править число в строку кавычками.
Если я буду преобразовывать число из семнадцати единиц (и более) при помощи функции String() или метода .toString(), то полученная строка уже будет содержать погрешность.
Основная соль задачи в самом начале.
КАК ПРЕОБРАЗОВАТЬ ЧИСЛО БОЛЬШЕ 17 ЕДИНИЦ В СООТВЕТСТВУЮЩУЮ СТРОКУ?
что за бред?
если не преобразовывать строку в число, то нет проблем, просто и тупо не юзать
JavaScript
1
parseInt(mainForm.firstNumber.value)
любой текст, введенный в input, текстом и является. и в prompt тоже.
даже если там будут только числа, текст от этого не приводится к числовым типам.

Добавлено через 19 минут
http://jsfiddle.net/Qdtvt/

можно же пользователю запретить вводить такие большие числа. все так делают, это нормально и обычно.
1
0 / 0 / 0
Регистрация: 26.09.2013
Сообщений: 15
14.10.2013, 11:54  [ТС]
Ок. Спасибо!
Рабочий вариант.

Добавлено через 12 часов 54 минуты
nubideus,
А есть вариант борьбы с "Negative answers will be 2s complement"?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
14.10.2013, 11:54
Помогаю со студенческими работами здесь

Сложение длинных чисел
Мне нужно сложить в паскале длинные числа (до 255 символов в строке). Исходные данные: в двух строках по одному длинному целому...

Умножение длинных чисел
Проверьте код,пожалуйста,верно ли реализованна задача: заданы две строки шестнадцатеричных символов (длинное шестнадцатеричное число в...

Сравнение длинных чисел a^n,b^m
Помогите как сделать сравнение чисел формата long long ? int main() { SetConsoleCP(1251); SetConsoleOutputCP(1251); ...

Сумма длинных чисел
помогите пожалуйста разработать подпрограмму соответствующую страдарту связей языка си с шестью аргументами...

Сложение длинных чисел
Есть два числа длиной до 254 символов.Нужно найти их сумму. Числа могут быть дробными. (использовать массив(ы)) .


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru