Форум программистов, компьютерный форум CyberForum.ru

Длинная арифметика - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Организовать цикл http://www.cyberforum.ru/cpp-beginners/thread658132.html
Вот приболел, а на лабы нужно задание, сижу и не понимаю, что от меня хотят и как это делать. http://f1.s.qip.ru/G1CCNmsq.png Попытался написать что-то типо этого // test_101.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include <stdio.h>
C++ Прервать работу програмы У меня вопрос , могу ли я как то прервать работу программы при невыполненни или выполнении условия? if ((defaultTemp > MaxTemp) or (MaxTemp <MinTemp)) std::cout<<"ERROR!!\n\n WRONG TEMPERATURE!!\n\n"; // прерывание программы else std::cout<<"Max temperature is "<<MaxTemp<<endl; http://www.cyberforum.ru/cpp-beginners/thread658118.html
Вывести вещественное число, равное делению первой переменной на вторую C++
Здравствуйте. Помогите пожалуйста с лабораторной... В языке С++ полный ноль, ничего не понимаю. Вот сами задания из лабы: 2. Опишите в программе две переменные целого типа и введите их значения с клавиату-ры. Выведите на экран вещественное число, равное делению первой переменной на вторую. (Используйте операцию деления /. При делении целых чисел эта операция возвращает толь-ко целую часть...
C++ Вывести ASCII–код символа в десятичном, восьмеричном и шестнадцатеричном виде
Здравствуйте. Помогите пожалуйста с лабораторной... В языке С++ полный ноль, ничего не понимаю. Вот сами задания из лабы: 3. Опишите в программе переменную символьного типа и введите ее значение с клавиа-туры. Выведите на экран ASCII–код введенного символа в десятичном, восьмеричном и ше-стнадцатеричном виде, а также символы – больший и меньший «сосед» данного по ASCII–коду. Заранее...
C++ Посчитать количество занятых клеток кроссворда http://www.cyberforum.ru/cpp-beginners/thread658107.html
Помогите,пожалуйста решить задачу. Кроссворд размещен в квадрате. Строки и столбцы квадрата нумеруются снизу вверх и слева направо, начиная с 1. Поля для слов располагаются горизонтально либо вертикально и задаются путем указания координат начальной и конечной клеток. Какая-либо сортировка при задании полей отсутствует. Два пересекающихся слова могут располагаться как на одной горизонтали либо...
C++ Поиск количества битов для типа Всё понятно, кроме вот этого ((log((double)a)/log((double)2))); Мы логарифм числа а(числа 2 147 483 647) делим на логарифм числа 2 (на калькуляторе 9.33/0.3 = 31 (всё это примерно)). 1).Так вот какое тут основание у логарифма я понять никак не могу? 2). И почему 2 147 483 647, а не все 4 миллиона? #include <stdio.h> #include <math.h> int main() { int a,i; подробнее

Показать сообщение отдельно
vlad_light
4 / 4 / 0
Регистрация: 24.09.2012
Сообщений: 178
25.09.2012, 23:03     Длинная арифметика
Нужно реализовать сложение и умножение больших чисел.
Есть идея, необходима помощь в реализации на C++.
Собственно, идеи такие...
Сумма: берём 2 массива, записываем их в строки, затем добавляем к меньшему числу нули так, чтоб их длина стала одинаковой. Затем, начиная с последнего элемента каждого массива, поэлементно суммируем элементы и остаток деления этой суммы на 10 записываем в начало новой строки. Если результат целочисленного деления суммы на 10 больше 0, то к следующему остатку предварительно прибавляем этот результат. И так до начала массива.
Произведение: берём последний элемент меньшего массива и умножаем поэлементно на больший массив, с делением на 10 (как в предыдущем пункте) и получаем новый массив. Далее с предпоследним элементом делаем тоже самое, затем в конце приписываем к нему '0' и производим сумму последних. Повторяем до тех пор, пока не достигнем начало меньшего массива.
Вот, что я пока написал. Понимаю, что бред, но может его можно исправить. Помогите, пожалуйста, очень срочно нужно
код
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
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
#include <iostream>
#include <vector>
#include <string>
 
int CtI(char x) // char в int
{
    return int(x)-48;
}
 
char ItC(int x) // int в char
{
    return char(x+48);
}
 
std::string adapt(std::string x, std::string y) // дописываем нули
{
    std::string::iterator iter = y.begin();
        y.insert(iter, x.size() - y.size(), '0');
    return y;
}
 
std::string sum_func(std::string x, std::string y)
{
    
    std::string::iterator x_iter = x.begin();
    std::string::iterator y_iter = y.begin();
    x.insert(x_iter, '0');
    y.insert(y_iter, '0');
    if (x.size() > y.size())
        y = adapt(x,y);
    if (x.size() < y.size())
        x = adapt(y,x);
    std::string sum;
    std::string::iterator sum_iter = sum.begin();
    int temp = 0;
    for (x_iter = --x.end(), y_iter = --y.end(); x_iter != x.begin(); --x_iter, --y_iter) // для того, чтоб цикл выполнился до
    {                                                                                     // конца мы заранее добавили по нолику
        if (temp != 0)
        {
            sum.insert(sum_iter, ItC((CtI(*x_iter)+CtI(*y_iter))%10+temp));
            temp = 0;
        }
        else
            sum.insert(sum_iter, ItC((CtI(*x_iter)+CtI(*y_iter))%10));
        temp = (CtI(*x_iter)+CtI(*y_iter))/10;
    }
    if (temp != 0)
        sum.insert(sum_iter, ItC(temp));
    else
        sum.erase(sum_iter);
    return sum;
}
 
int main()
{
    std::string x, y;
    std::cin >> x >> y;
    std::cout << sum_func(x,y);
    std::cin.get(); std::cin.get(); 
    return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 19:44. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru