Go: package main

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

var scanner = bufio.NewScanner(os.Stdin)

func main() {
	table := [10]string{
		"* = ****",
		"* =* ***",
		"* =** **",
		"* =*** *",
		"* =**** ",
		" *= ****",
		" *=* ***",
		" *=** **",
		" *=*** *",
		" *=**** ",
	}
	for scanner.Scan() {
		tmp := strings.Split(fmt.Sprintf("%05s", scanner.Text()), "")
		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()
		}
		fmt.Println()
	}
}

C++: #include <vector>
#include <algorithm>
#include <iostream>
#include <functional>
#include <string>

using namespace std;

int main() {
    int n = 0;
    int N[5] = {0};
    cin >> n;
    
    N[0] = n / 10000;
    n %= 10000;
    N[1] = n / 1000;
    n %= 1000;
    N[2] = n / 100;
    n %= 100;
    N[3] = n / 10;
    n %= 10;
    N[4] = n;
    
    for(int i = 0; i < 8; i++) {
        for (int j = 0; j < 5; j++) {
            if(i == 0) {
                if (N[j] < 5) cout << "*";
                else cout << " ";
            }
            if(i == 1) {
                if (N[j] < 5) cout << " ";
                else cout << "*";
            }
            
            if(i == 2) cout << "=";
            
            if(i == 3) {
                if (N[j] > 4) N[j] -= 5;
                if (N[j] != 0) cout << "*";
                else cout << " ";
            }
            
            if(i == 4) {
                if (N[j] != 1) cout << "*";
                else cout << " ";
            }
            
            if(i == 5) {
                if (N[j] != 2) cout << "*";
                else cout << " ";
            }
            if(i == 6) {
                if (N[j] != 3) cout << "*";
                else cout << " ";
            }
            if(i == 7) {
                if (N[j] != 4) cout << "*";
                else cout << " ";
            }
            
            if (j == 4) cout << "\n";
        }      
  cout << "\n";
    }
    
    return 0;
}

C++: #include <iostream>
#include <string>
#include <cstring>
#include <vector>
#include <algorithm>
#include <cstdlib>

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

using namespace std;


int main()
{
	string s;
	string soro[10] = {"* = ****","* =* ***","* =** **","* =*** *","* =**** "," *= ****"," *=* ***"," *=** **"," *=*** *"," *=**** "};
	bool flag = true;
	while(cin >> s)
	{
		vector<char> c;

		rep(i,5-s.size())
		{
			c.push_back('0');
		}

		rep(i,s.size())
		{
			c.push_back(s[i]);
		}

		if(flag)
		{
			flag = false;
		}
		else
		{
			cout << endl;
		}

		rep(i,8)
		{
			rep(j,5)
			{
				cout << soro[c[j]-'0'][i];
			}
			cout << endl;
		}
	}
	return 0;
}

C++: #include<iostream>
#include<vector>
#include<algorithm>
#include<cstdio>
#include<set>
#include<map>
#include<stack>
#include<queue>
#include<string>
#include<cstring>
#include<cstdlib>
#include<cctype>
#include<bitset>
#include<functional>
#include<climits>
using namespace std;
typedef pair<int,int>pii;
const int INF=1e9;
const int dx[]={0,-1,0,1},dy[]={-1,0,1,0};


int main(){
    int n;
    bool flag=false;
    while(scanf("%d",&n)!=EOF){
        if(flag)puts("");
        else flag=true;

        int a[5];
        for(int i=4;i>=0;i--){
            a[i]=n%10;
            n/=10;
        }

        for(int i=0;i<2;i++){
            for(int j=0;j<5;j++){
                if(a[j]/5==i)printf("*");
                else printf(" ");
            }
            puts("");
        }
        puts("=====");

        for(int i=0;i<5;i++){
            for(int j=0;j<5;j++){
                if(a[j]%5==i)printf(" ");
                else printf("*");
            }
            puts("");
        }
    }
    return 0;
}

C++: #include <iostream>
using namespace std;
int main(){
	char ball[10][8] = {{'*',' ','=',' ','*','*','*','*'},
											{'*',' ','=','*',' ','*','*','*'},
											{'*',' ','=','*','*',' ','*','*'},
											{'*',' ','=','*','*','*',' ','*'},
											{'*',' ','=','*','*','*','*',' '},
											{' ','*','=',' ','*','*','*','*'},
											{' ','*','=','*',' ','*','*','*'},
											{' ','*','=','*','*',' ','*','*'},
											{' ','*','=','*','*','*',' ','*'},
											{' ','*','=','*','*','*','*',' '}};
	string i;
	while(cin >> i,!cin.eof()){
	for(int j=0;j<5-i.size();j++)i = '0' + i;
	//cout << i << endl;
	for(int k=0;k<8;k++){
		for(int l=0;l<5;l++){
			cout << ball[i[l]-'0'][k];
		}
		cout << endl;
	}
	cout << endl;
	}
}

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

int main(){
	bool f=0;
	int n,i,j;
	int a[5];
	char a0[11][10]={"* = ****","* =* ***","* =** **","* =*** *","* =**** "," *= ****"," *=* ***"," *=** **"," *=*** *"," *=**** "};
	while((cin>>n)!="EOF"){
		if(f==1) cout<<endl;
	a[0]=n/10000;
	a[1]=(n-a[0]*10000)/1000;
	a[2]=(n-a[0]*10000-a[1]*1000)/100;
	a[3]=(n-a[0]*10000-a[1]*1000-a[2]*100)/10;
	a[4]=(n-a[0]*10000-a[1]*1000-a[2]*100-a[3]*10);
	for(i=0;i<8;i++){
		for(j=0;j<5;j++){
			cout<<a0[a[j]][i];
		}
		cout<<endl;
	}
	f=1;
	}
	return 0;
}

C++: #include <iostream>
#include <sstream>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <climits>
#include <string>
#include <vector>
#include <stack>
#include <queue>
#include <set>
#include <map>
#include <algorithm>
#include <functional>

using namespace std;

typedef long long ll;
typedef unsigned long long ull;

#define REP( i, m, n ) for ( int i = (int)( m ); i < (int)( n ); i++ )
#define UREP( i, m, n ) for ( unsigned int i = (unsigned int)( m ); i < (unsigned int)( n ); i++ )
#define ITER( c ) __typeof( (c).begin() )
#define IREP( c, it ) for ( ITER(c) it = (c).begin(); it != (c).end(); ++it )
#define ALL( c ) (c).begin(), (c).end()
#define PB( n ) push_back( ( n ) )
#define MP( a, b ) make_pair( ( a ), ( b ) )
#define fst first
#define snd second

const string nums[] = {
	"*****     ",
	"     *****",
	"==========",
	" **** ****",
	"* **** ***",
	"** **** **",
	"*** **** *",
	"**** **** "
};

int main()
{
	string line;
	bool first = true;

	while ( cin >> line )
	{
		if ( first )
		{
			first = false;
		}
		else
		{
			cout << endl;
		}

		vector<string> res( 8 );

		while ( line.length() < 5 )
		{
			line = "0" + line;
		}

		UREP( i, 0, line.length() )
		{
			REP( j, 0, 8 )
			{
				res[j] += nums[j][ line[i] - '0' ];
			}
		}

		REP( i, 0, 8 )
		{
			cout << res[i] << endl;
		}
	}


	return 0;
}

C++: #include<iostream>
#include<algorithm>
#include<vector>
#include<stack>
#include<map>
#include<set>
#include<queue>
#include<cstdio>
#include<climits>
#include<cmath>
#include<cstring>
#include<string>
#include<sstream>

#define f first
#define s second
#define mp make_pair

#define REP(i,n) for(int i=0; i<(int)(n); i++)
#define FOR(i,c) for(__typeof((c).begin()) i=(c).begin(); i!=(c).end(); i++)
#define ALL(c) (c).begin(), (c).end()

using namespace std;

typedef unsigned int uint;
typedef long long ll;

const char *data[10]={
  "* = *****",
  "* =* ****",
  "* =** ***",
  "* =*** **",
  "* =**** *",
  " *= *****",
  " *=* ****",
  " *=** ***",
  " *=*** **",
  " *=**** *",
};

int main(){
  int n;
  int cc = 0;
  while(cin>>n){
    char buff[8][6] = {{0}};
    if(cc++ != 0) puts("");
    REP(i,5){
      int d = n % 10;
      //printf("d = %d, data[d] = %s\n",d,data[d]);
      REP(j,8){
        buff[j][4-i] = data[d][j];
        //printf("buff = %c\n",buff[j][5-i]);
      }
      n/=10;
    }
    REP(i,8) puts(buff[i]);
  }
}