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

Разбиение числа на сумму квадратов(ошибка в коде). - C++

Восстановить пароль Регистрация
 
MasYes
0 / 0 / 0
Регистрация: 19.10.2010
Сообщений: 4
20.10.2010, 18:15     Разбиение числа на сумму квадратов(ошибка в коде). #1
Задача банальна: с клавиатуры вводится число, нужно его представить в виде суммы двух квадратов. Программа должна работать менее 1 секунды. Диапазон вводимых чисел 1) до 1е3 2) до 1е6 3) до 1е9 4) до1е16(это уже, как мне сказали, совсем тяжко).
Ну, в общем, вот я тут написал.

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
#include "stdio.h"
#include "conio.h"
#include "iostream"
using namespace std;
 
int main(){
 int i, b, t=0;
 long long N, a=0;
 setlocale (LC_ALL, "Russian");
 printf( "Введите число:");
 cin >> N;
 bool *kv;
 kv = (bool*)calloc(1e14,sizeof(bool));
 for (i=1;a<N;i+=2){
     a+=i;
     if (a<10e13)
     kv[a]=1;
 t++;}
 kv[0]=1;
 a=0;
 for (i=1;a<N;i+=2){
     a+=i;
     t++;
     if ((N-a)>0)
     if (kv[N-a]==1){
        cout << "\na=" << a << " b=" << N-a << " t=" << t << "\n";
        cin >> b;
        if (b==-1)
            return 0;
     }}
     cout << "Сие не представляется возможным" << " t=" << t;
     _getch();
     return 0;
}



Суть алгоритма, если надо будет, поясню.
Проблема вот в чем: если я ввожу число 9999999999(десять девяток) и более (с какого это начинается не знаю, не проверял) то вылетает ошибка "Необработанное исключение в "0x001d15a2" в "переборы.exe": 0xC0000005: Нарушение прав доступа при записи "0x10de66e9", и ссылаются на kv[a]=1;, причем в этот момент а=276457129. если бы "а" было больше размерности масива, я бы понял, а так 0_о
О :-)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.10.2010, 18:15     Разбиение числа на сумму квадратов(ошибка в коде).
Посмотрите здесь:

Найти сумму квадратов цифр введённого числа C++
Разложение числа на сумму квадратов C++
Вычислить сумму квадратов чисел от 1 до введенного вами целого числа C++
C++ Удалить из числа все повторяющиеся цифры кроме первого вхождения. Ошибка в коде
C++ Ошибка в коде (взаимно обратные числа)
Все отрицательные числа возвести в квадрат, найти их количество, порядковые номера и сумму. Что не так в коде? C++
Найти сумму квадратов элементов, больших некоторого числа X C++
C++ Вычислить сумму квадратов всех целых чисел, меньших заданного числа a

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Nick Alte
Эксперт С++
1590 / 982 / 115
Регистрация: 27.09.2009
Сообщений: 1,897
Завершенные тесты: 1
20.10.2010, 18:43     Разбиение числа на сумму квадратов(ошибка в коде). #2
Переменная типа int вмещает числа от -2 до 2 миллиардов. unsigned int - от 0 до 4 миллиардов. 9 девяток и тем более 1e16 влезут в double (или специальный 64-битный целочисленный тип, у разных компиляторов они по-разному называются).
MasYes
0 / 0 / 0
Регистрация: 19.10.2010
Сообщений: 4
20.10.2010, 19:03  [ТС]     Разбиение числа на сумму квадратов(ошибка в коде). #3
Я заменил int на long long и ошибка осталась = (
И заодно вопрос по ходу - как создать булевский массив с 1е16 элементов? А то каллок мне уже при 1е15 ругается на ту же строчку, даже если ввести 8.
Yandex
Объявления
20.10.2010, 19:03     Разбиение числа на сумму квадратов(ошибка в коде).
Ответ Создать тему
Опции темы

Текущее время: 20:28. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru