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

Быстро возвести в квадрат число заданной длины (<16 байт) - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ почему не добавляет элемент? http://www.cyberforum.ru/cpp-beginners/thread886965.html
insert() должен добавить один элемент,но он неправильно работает,где ошибка? #include "stdafx.h" #include <iostream> using namespace std; void Insert(const int index,const int value,int * arr,const int size); int _tmain(int argc, _TCHAR* argv) { int * arr=new int; for(int i=0;i<10;i++)
C++ Запись и чтение с файла Здравствуйте,помогите пожалуйста ..есть две структуры, но каждая записывается и считывается с разных файлов, не посоветует как можно объединить,чтоб все записывалось и считывалось в один файл? void List::outFilesamolet(char * path) { FILE *out; if ((out = fopen(path,"wb")) == NULL) { cout << "Файл " << path << "не может быть открыт!" << endl; return; } struct samoletTemp {... http://www.cyberforum.ru/cpp-beginners/thread886947.html
Структуры (cведения об абонентах АТС: ФИО владельца телефона, год установки телефона, номер телефона, тип установки телефона, льгота) C++
Сведения об абонентах АТС. Структура должна содержать следующую информацию: фамилию, имя, отчество владельца телефона, год установки телефона, номер телефона, тип установки телефона (спаренный или нет), льготу (процентную скидку при оплате). # include <stdio.h> # include <conio.h> # include <iostream.h> const LEN = 40,LEN3=120; struct atc {char fam ,ima,otch;
C++ Упростить задачу (Таблица футбольного чемпионата задана квадратной матрицей - определить номера команд, прошедших чемпионат без поражений)
помогите пожалуйста с с++ здесь дана задача и весь код от нее но мне нужно только б) кому не сложно выделите именно нужное Таблица футбольного чемпионата задана квадратной матрицей порядка n, в которой все элементы, принадлежащие главной диагонали, равны нулю, а каждый элемент, не принадлежащий главной диагонали, равен 2, 1 или 0 (числу очков, набранных в игре: 2 — выигрыш, 1 — ничья, 0...
C++ Как глобальную переменную засунуть в структуру? http://www.cyberforum.ru/cpp-beginners/thread886913.html
#include<stdio.h> #include<malloc.h> #include<string.h> typedef struct Item { char *info; struct Item *next; }Item;
C++ Найти пару точек расстояние между которыми максимально(Исправить программу ) В трехмерном пространстве заданы координаты n точек составить программу определяющую пару точек расстояние между которыми максимально Сама программа есть но нужно ее изменить под dev-c++ и сделать как можно проше (чтобы можно было ее объяснить ) #include <cmath> #include <cstdlib> #include <ctime> #include <iomanip> #include <iostream> struct Point { double x, y, z; подробнее

Показать сообщение отдельно
drdrink
39 / 39 / 1
Регистрация: 13.05.2013
Сообщений: 103
01.06.2013, 21:05     Быстро возвести в квадрат число заданной длины (<16 байт)
vlad_light, не ну я не знаю, просто когда я использовал unsigned long long то когда возникал перенос, то есть в более старшей стоял битик либо 0 либо 1, то он оставшиеся биты заполнял как попало, и работа происходила некорректно

Добавлено через 4 минуты
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
void BigN::Sqr(const BigN& a)
{
    int n = a.GetLen(); // GetLen() - возвращает длину числа в базах
    Destroy();
    Array(2*n);  //  выделение памяти 2*n баз
    D_BASE tmp = 0, mask = 1 << (2*BASE_SIZE - 1), tmp1 = 0, r = 0xffffffff; // D_BASE - unsigned long, BASE_SIZE - 16;
    BASE u = 0, v = 0, carry = 0; // BASE - unsigned short
    BASE *aw = a.al, *bw = al;   // al - указатель на младшую базу числа
    for(int i = 0; i < n; i++)
    {
        tmp = *(bw + 2*i) + (*(aw + i))*(*(aw + i));
        u = tmp >> BASE_SIZE;
        v = (BASE)tmp;
        *(bw + 2*i) = v;
        carry = 0;
        for(int j = i + 1; j < n; j++)
        {
            tmp = 0;
            tmp = (*(aw + i))*(*(aw + j));
            tmp1 = *(bw + i + j) + (carry*(1 << BASE_SIZE) + u);
            if((tmp & mask) == 0)
            {
                if(tmp1 > r - 2*tmp)
                    carry = 1;
                else carry = 0;
            }
            else carry = 1;
            tmp = 2*tmp + tmp1;
            u = tmp >> BASE_SIZE;
            v = (BASE)tmp;
            *(bw + i + j) = v;
        }
        tmp = 0;
        tmp = *(bw + i + n + 1)*(1 << BASE_SIZE) + *(bw + i + n) + (carry*(1 << BASE_SIZE) + u);
        *(bw + i + n + 1) = tmp >> BASE_SIZE;
        *(bw + i + n) = (BASE)tmp;
    }
    ar = ah;  // ar - указатель на старшую базу, ah - указатель на конец выделенной памяти
    for(;*ar == 0 && ar > al; --ar)  // Нормализация числа
    {}
}
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru