Задать вопрос
Этот вопрос закрыт для ответов, так как повторяет вопрос (Выводит 0 в начале ответа) Как исправить код?
@Nazarko03

Как убрать нілики из ответа даного кода, ответ правильний только нулі виводить перед ответом?

как убрать нулі из ответа, должно умножать два больших числа, умножает но перед ответом много нуліков, как исправить, помогите

#include <cstdio>
#include <cstring>
#define forn(i, n) for (int i = 0; i < (int)(n); i++)
void Karatsuba( int n, int *c, int *a, int *b )
{
  if (n <= 8)
  {
    forn(i, 2 * n)
      c[i] = 0;
    forn(i, n)
      forn(j, n)
        c[i + j] += a[i] * b[j];
    return;
  }
  int k = n / 2;
  int *f = new int[n];
  int *a12 = new int[k];
  int *b12 = new int[k];
 
  Karatsuba(k, c, a, b);
  Karatsuba(k, c + n, a + k, b + k);
  forn(i, k)
  {
    a12[i] = a[i] + a[i + k];
    b12[i] = b[i] + b[i + k];
  }
  Karatsuba(k, f, a12, b12); 
  forn(i, n)
    f[i] -= c[i] + c[i + n];
  forn(i, n)
    c[i + k] += f[i];
}
const int N = 20;
int a[N], b[N], c[2 * N];
void read( int *a )
{
  static char s[N + 1];
  gets(s);
  int k = 0;
  for (int i = strlen(s) - 1; i >= 0; i--)
    a[k++] = s[i] - '0';
}
void out( int n, int *a ){
  forn(i, n)
    printf("%d", a[n - i - 1]);
}
int main(){
  read(a);
  read(b);
  Karatsuba(N, c, a, b);
  forn(i, 2*N)
    if (c[i] >= 10)
      c[i + 1] += c[i] / 10, c[i] %= 10;
  out(2 * N, c);
}
  • Вопрос задан
  • 68 просмотров
Подписаться 1 Средний 3 комментария
Ответы на вопрос 1
wataru
@wataru Куратор тега C++
Разработчик на С++, экс-олимпиадник.
Готов поклястся, что именно этот вопрос был задан вот тут.

Но вы же, видимо, его и отредактировали, а теперь спрашиваете опять. Ответ там уже был мной дан.
Ответ написан
Ваш ответ на вопрос

Вопрос закрыт для ответов и комментариев

Потому что уже есть похожий вопрос.
Похожие вопросы