codice:
#include <iostream>
#include <string>
#include <sstream>

using namespace std;

string intToString(int i)
{
	ostringstream ss;
	ss << i;
	return ss.str();
}

int main()
{
	int num = 2112171819;
	string str_n = intToString(num);
	string str_new = "";

	char c = '\0';
	int n = 0;
	for(int i = 0; i < str_n.size(); i++)
	{
		//stato iniziale
		if(c=='\0')
		{
			c = str_n.at(i);
			n = 1;
		}
		else
		{
			if(c != str_n.at(i))
			{
				str_new += intToString(n);
				str_new.push_back(c);
				n=1;
			}
			else
			{
				n++;
			}			
			
			c = str_n.at(i);
		}
		
		if(i == str_n.size()-1)
		{
			str_new += intToString(n);
			str_new.push_back(c);
		}
	}
	
	
	cout << str_new << endl;
}
Con 2112171819 ottengo:

codice:
122112111711181119
che mi pare giusto. Ho fatto qualche altra pure e pare andare.
L'ho scritta in C++ per fare prima ma non dovresti avere problemi a portarla in C.
Poi controlla, forse il corpo del for può essere scritto un pò meglio...

Come si chiama questo giochino? Ne avevo letto da qualche parte tempo fa.
Tra l'altro ha molti aspetti curiosi e alcune proprietà carine, ricordo