Пытаюсь реализовать умножение строковых чисел стобиком. На вход подается два числа, записанные в 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");
}
Должно хватить
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");
}
Уже несколько раз проанализировал алгоритм и не могу найти ошибку.
Как минимум, тут:
cc==A[ix] * B[jx];
должно быть =
, а не ==
.
Остальное читать лень.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Делаю вывод текста в QLabel из базы данныхВ разных случаях текста может быть много, а может вообще не быть
Всем привет , возникли трудности в написании 4-х прог на c++Кто может поделиться своими наработками , идеями - велком
Есть 2 лампочкиУ каждой есть 2 состояния - активная(горит) и пассивная(цвет лампочки - черный)