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

Реализовать функцию целочисленного деления для двух линейных двусвязных списков - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Как правильно создать условие, в зависимости от слова, которое вводишь в консоль http://www.cyberforum.ru/cpp-beginners/thread1228556.html
Решил познать великий и могучий с++. Уже в 1ый день пошли косяки. Захотел начать с простой программы, которая в зависимости от ответа да или нет общалась с пользователем через консоль. Только вот как правильно юзать условия в зависимости от того, что пользователь ввел в строку я точно не знаю. Пожалуйста, исправьте или подскажите. #include <iostream> #include <ostream> #include <clocale>...
C++ Для каждого из K чисел выведите в отдельную строку число из первого массива, наиболее близкое к данному Задание:В первой строке входных данных содержатся числа N и K (0NK100001). Во второй строке задаются N чисел первого массива, отсортированного по неубыванию, а в третьей строке – K чисел второго массива. Каждое число в обоих массивах по модулю не превосходит 2109. Для каждого из K чисел выведите в отдельную строку число из первого массива, наиболее близкое к данному. Если таких несколько,... http://www.cyberforum.ru/cpp-beginners/thread1228553.html
Клиент-сервер - организовать передачу файлов C++
Написал программу клиент - сервер и хотел бы её модернизировать, но ни хватает знаний и практики. Вот что хотелось бы добавить: 1)в примерах нашёл, что и сервера можно отправлять файлы клиентам, но там надо переключать (слушать, пронимать). Можно прописать так чтобы он слушал и отправлял файлу (автоматически) клиенту; 2)сделать таймер событий, проверять все пришедшие файлы, смотреть на дату...
Разделить строку на две части C++
дана задача.есть переменная char = россия. надо разделить её на две части так,чтобы получилось что a = рос,b=сия
C++ Вывести части строки до определенных символов http://www.cyberforum.ru/cpp-beginners/thread1228486.html
Помогите мне с задачкой. Дана строка, нужно разделить ее на несколько частей до определенных символов (или не обязательно именно так). Вот задачка, чтобы вам было понятней: In the early nineties, the World Wide Web (WWW) was invented. Nowadays, most people think that the WWW simply consists of all the pretty (or not so pretty) HTML-pages that you can read with your WWW browser. But back then,...
C++ Какое отношение имеет перегрузка к полиморфизму? прочитал в одном учебнике: (глава посвящена функциям. Подраздел: Перегрузка функций) "В результате перегрузки функций происходит явление, называемое полиморфизмом функций. Полиморфная функция - это функция, отличающаяся многообразием форм." Ну и дальше по тексту термины перегруженная функция и полиморфная функция (а также перегрузка ф-ций и полиморфизм ф-ций) используются как синонимы. в... подробнее

Показать сообщение отдельно
Pantheon96
Сообщений: n/a
18.07.2014, 04:03     Реализовать функцию целочисленного деления для двух линейных двусвязных списков
Реализовать операцию / (целочисленное деление) для двух длинных натуральных чисел. Операнды должны быть представлены линейными двусвязными списками, информационная часть элементов которых одна цифра числа.
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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
#include <iostream>
using namespace std;
#include <stdlib.h>
struct Node
{
    int info;
    Node *next;
    Node *prev;
};
void create(FILE *f, Node *&head) //Создание списка из файла
{
    Node *x;
    Node *y;
    head=new Node;
    fscanf(f,"%d",&head->info);
    head->prev=NULL;
    x=head;
    while(!feof(f))
    {
        x->next=new Node;
        y=x->next;
        fscanf(f,"%d",&y->info);
        y->prev=x;
        y->next=NULL;
        x=y;
    }
}
void pechat(Node *head) //Печать списка
{
    Node *x;
    x=head;
    while(x->next!=NULL)
    {
        printf("%d",x->info);
        x=x->next;
    }
    printf("\n");
}
int func(Node *head1, Node *head2)//Основная функция
{
    Node *x=head1;
    Node *y=head2;
    int s=0;
    while (x->next!=NULL)
        x=x->next;
    while (y->next!=NULL)
        y=y->next;
    while (x!=NULL)
    {
        while (y!=NULL)
        {           
            if (x->info>=y->info) {x->info=x->info-y->info; x=x->prev; y=y->prev;}
            else 
            {
                if(x->prev!=NULL) x=x->prev; else {return s; exit(0);}
                while (x->info==0) {x->info=9; if(x->prev!=NULL) x=x->prev; else {return s; exit(0);}}
                x->info=x->info-1;
                x=x->next;
                while (x->info==9) x=x->next;
                x->info=x->info+10-y->info;
                x=x->prev;
                y=y->prev;
            }
        }
        if (y==NULL) 
        {
            x=head1;
            y=head2;
            while (x->next!=NULL)
                x=x->next;
            while (y->next!=NULL)
                y=y->next;
            s++;
        }
    }
    return s;
}               
void main()
{
    FILE *f1;
    FILE *f2;
    Node *head1=NULL;
        Node *head2=NULL;
    f1=fopen("C:\\number1.txt","r");
    f2=fopen("C:\\number2.txt","r");
    create(f1,head1);
    pechat(head1);
    create(f2,head2);
    pechat(head2);
    printf("%d",func(head1,head2));
    system("pause");
}
Функция создания списка из файла работает правильно. Основная функция работает по методу вычитания столбиком. Когда доходим до левого края вычитаемого, программа снова возвращается к правым краям обоих чисел. Когда получается, что уменьшаемое становится меньше вычитаемого, мы возвращаем s. Функция работает правильно на маленьких числах. Примерно при x=y*y, s становится на 1 меньше реального. В итоге, чем больше x, тем больше s программное расходится с реальным. Тестировал на значениях y=5 и разных значениях x. Пока x<25-выдает верный ответ при x>=25 и примерно до 100 выдает s-1 от реального, дальше еще меньше. Не могу понять, в чем проблема. Помогите, пожалуйста. В файлах числа записаны в таком виде: если x=100, то в файле 1 0 0 (между цифрами числа-пробелы и после последней цифры пробел.

Добавлено через 1 час 9 минут
Тема актуальна.

Добавлено через 8 часов 25 минут
Тема актуальна

Добавлено через 43 минуты
Актуально

Добавлено через 1 час 49 минут
Актуально

Добавлено через 2 часа 12 минут
Актуально
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 03:05. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru