Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
1 / 1 / 0
Регистрация: 10.11.2010
Сообщений: 81

Длинная арифметика (сумма) и ошибка выхода массива за пределы

17.04.2012, 09:48. Показов 2185. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем доброго времени суток, ребят, пишу программу по базовым операциям на длинную арифметику, начал как наверное все начинают с суммы, написал за мин 10, вроде ничего сложного, но у меня почему то вылетает за грань массива, посмотрите пожалуйста, может чей то свежий взгляд найдет ошибку

Для удобности напихал комментариев.

C#
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
private void button1_Click(object sender, EventArgs e)
        {
            string s1, s2;
            int i1, i2;
            int pr1=0;
            int [] ar1 = new int[10]; //массив 1, тут храниться первое длинное число
            int [] ar2 = new int[10]; //массив 2, тут храниться первое длинное число
            int [] ar3 = new int[11]; //массив 3, тут храниться результат суммы.
            s1 = textBox1.Text;
            s2 = textBox2.Text;
            for (int ii = 0; ii < 10; ii++) //читаем текстэдит, и переводим символы в цифры, собственно заполняем масивы
            {
                ar1[ii] = Convert.ToInt32(s1[ii]); 
                ar2[ii] = Convert.ToInt32(s2[ii]);
            }
            for (int hh = 9; hh > (-1) ; hh--)  //исчисление суммы
            {
                if ((ar1[hh] + ar2[hh]) > 10)  //если сумма больше 10, 1 в разряд выше остальное в поточную позицию
                {
                    pr1 = 1;
                    ar3[hh] = ar1[hh] + ar2[hh] + ar3[hh] - 10;
                    ar3[hh - 1] = pr1;
                }
                else
                {
                    ar3[hh] = ar1[hh] + ar2[hh]+ ar3[hh];  //если не больше 10, просто пишем сумму в 3-тий массив
                }
            }
            for (int yy = 1 - pr1; yy < 11; yy++)  // вывод 3-тего массива в 3-тий текстэдит
            {
                textBox3.Text += Convert.ToString(ar3[yy]); 
            }
        }
ругается на
C#
1
if ((ar1[hh] + ar2[hh]) > 10)
в Шарпе, номера позиций в массиве так же начинаются с 0?
если у кого есть что то реализовано из длинной арифметики, прошу поделитесь)

Спасибо.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
17.04.2012, 09:48
Ответы с готовыми решениями:

Ошибка из-за выхода за пределы массива
Здравствуйте! Я делаю приложение в Android Studio и столкнулся с проблемой. Я создал listView и адаптер. Мне нужен был живой поиск и я...

Удаление компонента программно. Ошибка выхода за пределы массива
procedure clearImageBox ; var i:integer; begin for i:=0 to form2.ScrollBox2.ComponentCount-1 do if ...

Ошибка выхода за пределы массива при обращении к нескольким Panel
Здравствуйте. Есть 10 элементов Panel, нужно их выводить в рандомном порядке при нажатии на кнопку button1 (далее) и чтобы они повторно...

5
Неадекват
 Аватар для freeba
1501 / 1237 / 248
Регистрация: 02.04.2010
Сообщений: 2,807
17.04.2012, 10:14
Так сойдет?
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
using System;
using System.Numerics;
 
namespace Numeric
{
    class Program
    {
        static void Main(string[] args)
        {
            BigInteger A = BigInteger.Parse("658657879729837487435873657634756349052980790898307534657349545");
            BigInteger B = BigInteger.Parse("12931820381029380123912837475672890110298391287390129312039812937120897409123");
 
            Console.WriteLine("Сложение: {0}, \nВычитание: {1}, \nУмножение: {2}, \nДеление: {3}", A + B, A - B, A * B, B / A);
            Console.ReadKey(true);
        }
    }
}
0
Эксперт Java
 Аватар для turbanoff
4094 / 3828 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 12
17.04.2012, 10:21
Вот здесь можно посмотреть пример реализации
Mono BigInteger
0
1 / 1 / 0
Регистрация: 10.11.2010
Сообщений: 81
17.04.2012, 11:01  [ТС]
проблема в том что в задании указано что нужно использовать классический метод длинной арифметики, тоесть через массивы или битовые поля, через поля наверное быстрее , но я в них не бум бум, так что лучше через массивы

Еще раз спасибо!
0
Эксперт Java
 Аватар для turbanoff
4094 / 3828 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 12
17.04.2012, 11:14
Замените условие внутри цикла на такое:
C#
1
2
3
4
5
6
7
8
9
10
11
                ar3[hh] = ar1[hh] + ar2[hh] + pr; //пишем нужную сумму
                
                if (ar3[hh]> 10)  //если сумма больше 10
                {
                    pr1 = 1;  //1 в разряд выше 
                    ar3[hh] -= 10; //а самму сумму уменьшаем на 10
                }
                else
                {
                    pr1 = 0;
                }
Должно помочь
0
28 / 28 / 10
Регистрация: 10.03.2012
Сообщений: 249
07.05.2012, 20:58
В Шарпе есть готовый тип BigInteger в библиотеке System.Numerics.dll.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
07.05.2012, 20:58
Помогаю со студенческими работами здесь

Длинная арифметика. сумма факториалов.
задание было вычислить 1\1! +1\2! + ... + 1/n! при n&gt;10 ответ представить в виде несократимой дроби тип инт разрешает в данном...

Длинная арифметика, сумма чисел
Входной файл содержит набор целых десятичных чисел, каждое из которых не превышает 30 десятичных цифр. Необходимо вычислить сумму этих...

Длинная арифметика: сумма двух строк
int One = strlen(BufOne); int Two = strlen(BufTwo); int MaxL = max(One, Two); char *Result = (char*)malloc(MaxL); int a; double...

Класс "Автомобиль" и ошибка выхода за пределы массива
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Список_авто { class...

Длинная арифметика, суммирование элементов массива
Задан массив A из элементов типа byte (целое 8-ми разрядное без знака). Составить программу суммирования элементов массива. Если сумма не...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru