A multiplicação não está funcionando

O objetivo é fazer uma calculadora de duas opções (+ e *) só que do jeito que a gente faria se fosse no papel, daí quando chega na parte destacada do código, o resultado é zerado e não sei porquê:

   for(int i = 0; i <tam2; i++){// multiplicação do segundo numero
                if(inutil2 == 0){
                n = num2[tam2 - (i+1)];
                }
                else{
                    n = resultado[tamanhor -i];
                    printf ("tamanhor :%d\n",resultado[tamanhor -(i)]);
                }
                n = n*2;
                n = n + sobra;

código completo:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include <time.h>
int *soma (int *num1, int *num2, int tam, int tam2,int *tamSoma)
{

    int *sum;
    int acima10 = 0;
    if (tam >= tam2){
        *tamSoma = tam + 10;
        sum = malloc ((*tamSoma) * sizeof (int));
        for (int i = 0; i < tam + 10; i++){
            
        *(sum + i) = 0;
        }
        for (int i = 0; i < tam+1; i++){
            *(sum + (*tamSoma - i)) = num1[tam - i] + num2[tam2 - i] + acima10;
            printf("soma: %d\n",*(sum + (tam2 + 10 - i)) );
            printf("acima10: %d\n", acima10);
            if (*(sum + (tam2 + 10 - i)) >= 10){
                printf("aquuiiii\n");
                *(sum + (tam2 + 10 - i)) -=10;
                acima10 = 1;
            }
            else{
                acima10 = 0;
            }
        }
    }
    if (tam < tam2){
        *tamSoma = tam2+10;
        sum = malloc ((*tamSoma) * sizeof (int));
        for (int i = 0; i < tam2 + 10; i++){
            *(sum + i) = 0;
        }
        for (int i = 0; i < tam+1; i++){
            *(sum + (tam2 + 10 - i)) = num1[tam - i] + num2[tam2 - i] + acima10;
            printf("soma:%d\n",*(sum + (tam2 + 10 - i)) );
            printf("acima10: %d\n", acima10);
            if (*(sum + (tam2 + 10 - i)) >= 10){
                printf("if");
                *(sum + (tam2 + 10 - i)) -=10;
                acima10 = 1;
            }
            else{
                acima10 = 0;
            }
        }
    }
    
    
    return sum;
}
int* multi(int* num1,int* num2,int tam1,int tam2){
    int n = 0, sobra = 0, z, tamanhor = tam2 + 10, inutil = 0, verdade = 1, inutil2 =0;
    int* resultado;
    int* respostaf;
    resultado = malloc(tam2 + 10);
    respostaf = malloc(tam2 + tam1);
   
    for (int i = 0; i < tam1 + tam2; i++){
        
        *(respostaf + i) = 0;// lista da resposta final
    }
    for (int i = 0; i < tam1 + tamanhor; i++){
        
        *(resultado + i) = 0;// lista da resposta final
    }
    
    while(verdade){
        for (int i = 0; i < tam1; i++){
            printf ("%d", num1[i]);
        }
        printf ("\n");
        for (int i = 0; i < tam2; i++){
            printf ("%d", num2[i]);
        }
        printf ("\n");//print dos numeros que começa tudo
        for(int i= 0; i <tam1; i++){// divisao do numero
            n = num1[i];
            z = n%2;
            n = n/2;
            if(z != 0){
                n = n+sobra;
                sobra = 5;
            }
            else{
                n = n +sobra;
                sobra = 0;
            }
            *(num1+i)= n;
        }
        sobra = 0;
        
        printf ("tam2 ;%d\n", tam2);
        for(int i = 0; i <tam2; i++){// multiplicação do segundo numero
            if(inutil2 == 0){
            n = num2[tam2 - (i+1)];
            }
            else{
                n = resultado[tamanhor -i];
                printf ("tamanhor :%d\n",resultado[tamanhor -(i)]);
            }
            n = n*2;
            n = n + sobra;
            if(n >= 10 && i+1<tam2){
                sobra = n/10;
                n = n-(sobra*10);
                
            }
            else{
                sobra = 0;
            }
            
            
        resultado[tamanhor - i-1] = n;// resposta da multiplicação
        printf ("resultado ; %d\n", resultado[tamanhor - i-1]);
        }
        inutil2 ++;
    
        if (num1[tam1]%2 !=0){
            respostaf = soma(respostaf, resultado, tam1+tam2, tamanhor,&inutil);
            printf ("resultado??? ; %d\n", resultado[tamanhor - 1]);
            
        }
        for (int i = 0; i < tamanhor; i++){
            printf ("%d", resultado[i]);
        }
        printf("\n");
        for(int i =0; i<tam1; i++){
            if(i+1 < tam1){
                if(num1[i]!=0){
                    break;
                }
            }
            else{
                if(num1[i] == 1){
                    verdade =0;
                }
            }
        }
    }
        
    return 0;
}


int *
entrada (int GeraVector, int *tam)
{
  char NumEnt[255];
  int *Number;
  int i, Entidade;


  if (GeraVector == 1)
    {

      scanf ("%s", NumEnt);
      Number = malloc (strlen (NumEnt) * sizeof (int));
      *tam = strlen (NumEnt);

      for (i = 0; i < strlen (NumEnt) * sizeof (char); i++)
	{

	  *(Number + i) = ((int) (NumEnt[i]) - 48);

	}
    }
  if (GeraVector == 0)
    {

      scanf ("%d", &Entidade);
      *tam = Entidade;
      Number = malloc (Entidade * sizeof (int));
      srand (time (NULL));
      for (i = 0; i < Entidade; i++)
	{

	  *(Number + i) = rand () % 10;
	}


    }
  return Number;

}

int main (){
    
    int *Inteiro;
    int *Inteiro2;
    int *adi;
    int i, j, Choice, tam, tam2, tamSoma;
    
    
    printf ("VOCE QUER QUE O PC CRIE UO QUER CRIAR VC? (0/1)");
    scanf ("%d", &Choice);
    Inteiro = entrada (Choice, &tam);
    Inteiro2 = entrada (Choice, &tam2);
    printf("soma ou multiplicação(0/1)?");
    scanf("%d", &Choice);
    if(Choice == 0){
        adi = soma (Inteiro, Inteiro2, tam, tam2, &tamSoma);
    }
    if(Choice == 1){
        multi(Inteiro, Inteiro2, tam, tam2);
    }
    
    /*for (i = 0; i < tam; i++)
    {
        printf ("%d", Inteiro[i]);
    }
    printf ("\n");
    for (i = 0; i < tam2; i++)
    {
        printf ("%d", Inteiro2[i]);
    }
    printf ("\n");*/
    
    while (1){
        if(adi[j]==0){
            j++;
        }
        else{
            break;
        }
    }
    for (i = j; i < tamSoma; i++)
    {
        printf ("%d", adi[i]);
    }
  return 0;
}