Como estaba en lenguajes de programacion para PC trate de que sea asi... Pero las comparaciones es lo mas rapido que podes tener en un micro.
short int cantidad_numeros(int dato){
if (dato<10) return 1;
else if (dato<100) return 2;
else if (dato<1000) return 3;
else if (dato<10000) return 4;
return 5;
}
Se usaria:
resultado = cantidad_numeros(dato1);
Eso para 16 bits. Dependiendo de los "datos" recibidos, veras si es conveniente que se pregunte primero por los menores o los mayores. Eso depende exclusivamente de los datos que se envien.
Luego para lo otro es valida la formula por igual, solo tenes que sacar la cantidad de numeros que tiene dato2, y multiplicarlo dato1 por 10^(numeros_de_dato2) y luego sumarle dato2.
SINO
Podes pasar el numero a letras, y contar las letras. Lo cual creo que tendrias mas sobrecarga, al menos en la parte de pasar de numeros a letras. mientras que la forma que indico aca tendrias la mayor sobrecarga en la multiplicacion y la potencia.