Умножение в столбик C++

352
26 ноября 2016, 18:53

Пытаюсь реализовать умножение строковых чисел стобиком. На вход подается два числа, записанные в string. Потом я их перевожу в массив и дальше пытаюсь сделать умножение. Уже несколько раз проанализировал алгоритм и не могу найти ошибку. Помогите разобраться, пожалуйста.

#include "stdafx.h"
#include <string>
#include <iostream>
#include <climits>
using namespace std;
int main()
{
    string a, n;
    int* A, *B, *C, length, l, cc;
    //cin>>a;
    //cin>>n;
    a = "1";
    n = "1";
    A = new int [a.size()];
    B = new int [n.size()];
    for (int i = 0; i < a.size(); i++)
        A[i] = a[a.size() - i - 1] - '0';
    for (int i = 0; i < n.size(); i++)
        B[i] = n[n.size() - i - 1] - '0';
    length = a.size() + n.size() + 1 ;
    l = length;
    C = new int [length];
    for (int ix = 0; ix < a.size() - 1; ix++)
        for (int jx = 0; jx < n.size() - 1; jx++)
        {
            C[ix + jx - 1] += A[ix] * B[jx];
            cc == A[ix] * B[jx];
        }
    for (int ix = 0; ix < length; ix++)
    {
        C[ix + 1] +=  C[ix] / 10;
        C[ix] %= 10;
    }
    while (C[length] == 0)
        length-- ;
    for (int i = l - 1; i > -1; i--)
        cout << C[i];
    system("PAUSE");
}
Answer 1

Должно хватить

length = a.size() + n.size() - 1;

Еще массив C у вас неинициализирован, в нем случайные числа. Его после создания надо обнулить.

И выводите вы его не так - уменьшаете length, а в цикле используете l.

Еще - циклы умножения у вас слишком короткие.

Я попытался исправить ваши ошибки:

int main()
{
    string a,n;
    int *A, *B, *C, length, l,cc;
    cin>>a;
    cin>>n;
    //a="1";
    //n="1";
    A=new int [a.size()];
    B=new int [n.size()];
    for (int i=0; i<a.size(); i++)
        A[i]=a[a.size()-i-1]-'0';
    for (int i=0; i<n.size(); i++)
        B[i]=n[n.size()-i-1]-'0';
    length = a.size() + n.size() - 1 ;
    l=length;
    C=new int [length];
    for (int ix = 0; ix < length; ix++)
    {
        C[ix] = 0;
    }
    for (int ix = 0; ix < a.size(); ix++)
    {
        for (int jx = 0; jx < n.size(); jx++)
        {
            C[ix + jx] += A[ix] * B[jx];
        }
    }
    for (int ix = 0; ix < length-1; ix++)
    {
        C[ix + 1] +=  C[ix] / 10;
        C[ix] %= 10;
    }
    while (C[length] == 0)
        length-- ;
    for(int i=length; i>-1; i--)
        cout<<C[i];
    system("PAUSE");
}
Answer 2

Уже несколько раз проанализировал алгоритм и не могу найти ошибку.

Как минимум, тут:

cc==A[ix] * B[jx];

должно быть =, а не ==.

Остальное читать лень.

READ ALSO
QLabel разного размера в QScrollArea

QLabel разного размера в QScrollArea

Делаю вывод текста в QLabel из базы данныхВ разных случаях текста может быть много, а может вообще не быть

290
проги на c++ , проблемы с mpi openmp cuda

проги на c++ , проблемы с mpi openmp cuda

Всем привет , возникли трудности в написании 4-х прог на c++Кто может поделиться своими наработками , идеями - велком

326
Счетчик из string C++

Счетчик из string C++

Необходимо реализовать счетчик из числа, записанного в StringТ

286
Свойства объекта в С++

Свойства объекта в С++

Есть 2 лампочкиУ каждой есть 2 состояния - активная(горит) и пассивная(цвет лампочки - черный)

274