Primer pregunta (suponiendo que todos sean positivos):
int resultado = (dato ==0) ? 0 : (int)Math.log10(dato) + 1;
Segunda preguntar, suponiendo que siempre dato1 sea el que va adelante
int potencia = (dato2 ==0) ? 0 : (int)Math.log10(dato2) + 1;
resultado = dato1*10^resultado + dato2;
La libreria es math.h , o cmath.h si estas en C++
Espera debería ser 3
pero esto ((101*10)^3)+505; me da 1514
Muy ingenioso, jamás se me hubiera ocurrido usar el logaritmo