Go: package main

import (
	"bufio"
	"fmt"
		"os"
	"strconv"
	"strings"
	)

var scanner = bufio.NewScanner(os.Stdin)

func main() {
	table := [10]string{
		"* = ****",
		"* =* ***",
		"* =** **",
		"* =*** *",
		"* =**** ",
		" *= ****",
		" *=* ***",
		" *=** **",
		" *=*** *",
		" *=**** ",
	}
	input := make([]string, 0)
	for scanner.Scan() {
		input = append(input, scanner.Text())
	}
	n := len(input)
	cnt := 0
	for cnt < n {
		tmp := strings.Split(fmt.Sprintf("%05s", input[cnt]), "")
		ans := make([]string, 0)
		for _, v := range tmp {
			iv, _ := strconv.Atoi(v)
			ans = append(ans, table[iv])
		}
		for i := 0; i < 8; i++ {
			for j := 0; j < 5; j++ {
				fmt.Print(string(ans[j][i]))
			}
			fmt.Println()
		}
		if cnt != n-1 {
			fmt.Println()
		}
		cnt++
	}
}

C++: #include <algorithm>
#include <bitset>
#include <cctype>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <ctime>
#include <deque>
#include <functional>
#include <iomanip>
#include <iostream>
#include <list>
#include <map>
#include <numeric>
#include <queue>
#include <set>
#include <sstream>
#include <stack>
#include <string>
#include <utility>
#include <vector>

using namespace std;

inline int toInt(string s) {int v; istringstream sin(s);sin>>v;return v;}
template<class T> inline string toString(T x) {ostringstream sout;sout<<x;return sout.str();}
template<class T> inline T sqr(T x) {return x*x;}

typedef vector<int> vi;
typedef vector<vi> vvi;
typedef vector<string> vs;
typedef pair<int, int> pii;
typedef long long ll;

#define all(a)  (a).begin(),(a).end()
#define rall(a) (a).rbegin(), (a).rend()
#define pb push_back
#define mp make_pair
#define each(i,c) for(typeof((c).begin()) i=(c).begin(); i!=(c).end(); ++i)
#define exist(s,e) ((s).find(e)!=(s).end())
#define range(i,a,b) for(int i=(a);i<(b);++i)
#define rep(i,n)  range(i,0,n)
#define clr(a,b) memset((a), (b) ,sizeof(a))
#define dump(x)  cerr << #x << " = " << (x) << endl;
#define debug(x) cerr << #x << " = " << (x) << " (L" << __LINE__ << ")" << " " << __FILE__ << endl;

const double eps = 1e-10;
const double pi  = acos(-1.0);
const ll INF =1LL << 62;
const int inf =1 << 30;

string digits[10];

int main(void){
	rep(i,10){
		digits[i]="";
		if(i>=5)
			digits[i]+=" *=";
		else
			digits[i]+="* =";
		rep(j,5){
			if(i%5==j)
				digits[i]+=" ";
			else
				digits[i]+="*";
		}
	}
	string in;
	bool first=true;
	while(cin >> in ){
		if(cin.eof())
			break;
		else if(first)
			first=false;
		else
			cout << endl;
		while(in.size() < 5)
			in = "0"+in;
		rep(i,8){
			rep(j,5)
				cout << digits[(in[j]-'0')][i];
			cout << endl;
		}
	}
	return 0;
}

C++: #include <cstdio>
#include <cstdlib>
#include <cmath>
#include <climits>
#include <cfloat>
#include <cstring>
#include <map>
#include <utility>
#include <set>
#include <iostream>
#include <memory>
#include <string>
#include <vector>
#include <algorithm>
#include <functional>
#include <sstream>
#include <fstream>
#include <complex>
#include <stack>
#include <queue>

using namespace std;
typedef long long LL;
typedef pair<int, int> PII;
static const double EPS = 1e-5;

#define FOR(i,k,n) for (int i=(k); i<(int)(n); ++i)
#define REP(i,n) FOR(i,0,n)

int main(void){
  string num;
  map<char,string> data;
  data['0'] = "* = ****";
  data['1'] = "* =* ***";
  data['2'] = "* =** **";
  data['3'] = "* =*** *";
  data['4'] = "* =**** ";
  data['5'] = " *= ****";
  data['6'] = " *=* ***";
  data['7'] = " *=** **";
  data['8'] = " *=*** *";
  data['9'] = " *=**** ";
  bool f=false;
  while(cin>>num){
    if(f){
      cout<<endl;
    }else{
      f = true;
    }
    while(num.size()!=5) num.insert(0,"0");
    vector<string> soroban;
    REP(i,num.size()){
      soroban.push_back(data[num[i]]);
    }
    REP(y,soroban[0].size()){
      REP(x,soroban.size()){
        cout<<soroban[x][y];
      }
      cout<<endl;
    }
  }

  return 0;
}

C++: #include <iostream>
#include <cstdio>
#include <cstdlib>
using namespace std;
int main()
{
	char s[6], r[5][8], d;
	int n, i, j, c;
	while (cin >> n)
	{
		//string t[8] = {""};
		if (cin.eof()) break;
		sprintf(s, "%05d", n);
		for (i = 0; i < 5; i++)
		{
			d = (char)s[i];
			c = atoi(&d);
			if (c < 5)
			{
				r[i][0] = '*';
				r[i][1] = ' ';
			}
			else
			{
				r[i][0] = ' ';
				r[i][1] = '*';
			}
			r[i][2] = '=';
			for (j = 3; j < 8; j++)
			{
				if (c != j-3 && c != j+2)
					r[i][j] = '*';
				else
					r[i][j] = ' ';
			}
		}
		for (i = 0; i < 8; i++)
		{
			for (j = 0; j < 5; j++)
			{
				cout << r[j][i];
			}
			cout << endl;
		}
		cout << endl;
	}
}

C++: #include <iostream>
#include <cstdio>
using namespace std;

int main(){
	int n,c,a,i,j;
	while(cin >> n){
		int b[8][5];
		c = 10000;
		for(i=0;i<5;i++){
			a = n/c;
			if(a<5) {
				b[0][i] = 1;
				b[1][i] = 0;
			}
			else {
				b[0][i] = 0;
				b[1][i] = 1;
			}
			b[2][i] = 2;
			if(a==0||a==5){
				for(j=4;j<8;j++){
					b[j][i] = 1;
				}
			}
			else if(a==1||a==6){
				for(j=3;j<8;j++){
					if(j==4) continue;
					b[j][i] = 1;
				}
			}
			else if(a==2||a==7){
				for(j=3;j<8;j++){
					if(j==5) continue;
					b[j][i] = 1;
				}
			}
			else if(a==3||a==8){
				for(j=3;j<8;j++){
					if(j==6) continue;
					b[j][i] = 1;
				}
			}
			else {
				for(j=3;j<7;j++){
					b[j][i] = 1;
				}
			}
			n -= c*a;
			c /= 10;
		}
		for(i=0;i<8;i++){
			for(j=0;j<5;j++){
				if(b[i][j] == 1) cout << "*";
				else if(b[i][j] == 2) cout << "=";
				else printf("%*s",1,"");
				b[i][j] = 0;
			}
			cout << '\n';
		}
	}
	return 0;
}

C++: #include<iostream>
using namespace std;

int main(){
	int input;
	int abacus[5];

	while(cin >> input){
		for(int i=0; i< 5; i++){
			abacus[4-i] = input% 10;
			input/= 10;
		}

		for(int i=0; i < 5; i++){
			cout << abacus[i];
		}
		cout << endl;

		for(int i=0; i < 5; i++){
			if(abacus[i] < 5) cout << '*';
			else cout << " ";
		}
		cout << endl;

		for(int i=0; i< 5; i++){
			if(abacus[i] < 5){
				cout << " ";
			}
			else{
				cout << "*";
				abacus[i]-= 5;
			}
		}
		cout << endl;

		cout << "=====" << endl;

		for(int i=0; i < 5; i++){
			for(int j=0; j < 5; j++){
				if(abacus[j] == 0) cout << " ";
				else cout << "*";

				abacus[j]--;
			}
			cout << endl;
		}
	}
}

C++: #define _USE_MATH_DEFINES
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <climits>
#include <cfloat>
#include <ctime>
#include <cassert>
#include <map>
#include <utility>
#include <set>
#include <iostream>
#include <memory>
#include <string>
#include <vector>
#include <algorithm>
#include <functional>
#include <sstream>
#include <complex>
#include <stack>
#include <queue>
#include <numeric>
#include <list>
#include <iomanip>


#ifdef _DEBUG
#define typeof(X) std::identity<decltype(X)>::type //C++0x (for vs2010)
#else
#define typeof(X) __typeof__(X) // for gcc
#endif

#define sz(a)  int((a).size())
#define FOREACH(it, c) for (typeof((c).begin()) it=(c).begin(); it != (c).end(); ++it)
#define FOR(i,count) for (int i = 0; i < (int)(count); i++)

template <class T> void max_swap(T& a, const T& b) { a = max(a, b); }
template <class T> void min_swap(T& a, const T& b) { a = min(a, b); }

using namespace std;
static const double EPS = 1e-5;
typedef long long ll;
const int MODULO = 100000 ;
const int INF = 100000000; //1e8

typedef long long ll;
typedef pair<int,int> Pii;
typedef pair<ll,ll> Pll;
typedef complex<double> Cd;

using namespace std;


int main()
{
	int n;
	bool nw = false;
	while(cin>>n){
		if(nw) puts("");
		nw = true;
		int a[5];
		for(int i = 10000,j = 0; j < 5; i /= 10,j++) a[j] = (n / i) % 10;
		char c[6];
		FOR(j,5) c[j] = a[j]/5 ? ' ':'*';
		c[5] = '\0';
		puts(c);
		FOR(j,5) c[j] = a[j]/5 ? '*':' ';
		puts(c);
		puts("=====");
		FOR(i,5){
			FOR(j,5){
				putchar(a[j]%5 == i ? ' ':'*');
			}
			puts("");
		}
	}
	return 0;
}