Пытаюсь реализовать умножение строковых чисел стобиком. На вход подается два числа, записанные в 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];
должно быть =, а не ==.
Остальное читать лень.
Как развивать веб-проекты в 2026 году: технологии, контент E-E-A-T и факторы доверия
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники