Go: package main

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

var scanner = bufio.NewScanner(os.Stdin)

func main() {
	table := [][]int{ // abcdefgの順番の
	{1,1,1,1,1,1,0}, // 1
	{0,1,1,0,0,0,0}, // 2
	{1,1,0,1,1,0,1}, // 3
	{1,1,1,1,0,0,1}, // 4
	{0,1,1,0,0,1,1}, // 5
	{1,0,1,1,0,1,1}, // 6
	{1,0,1,1,1,1,1}, // 7
	{1,1,1,0,0,1,0}, // 8
	{1,1,1,1,1,1,1}, // 9
	{1,1,1,1,0,1,1}, // 10
	}
	for scanner.Scan() {
		n, _ := strconv.Atoi(scanner.Text())
		if n == -1 {
			break
		}
		initial := []int{0,0,0,0,0,0,0}
		for i := 0; i < n; i++ {
			scanner.Scan()
			d, _ := strconv.Atoi(scanner.Text())
			for j := 6; j >= 0; j-- {
				fmt.Printf("%d", initial[j]^table[d][j])
				initial[j] = table[d][j]
			}
			fmt.Println()
		}
	}
}

C++: #include <iostream>
#include <algorithm>

using namespace std;

int btoi(string s)
{
	int n=0;
	for(int i=0;i<7;i++){
		n<<=1;
		if(s[i]=='1')
			n++;
	}
	return n;
}
string itob(int n)
{
	string s;
	for(int i=0;i<7;i++)
		s+='0'+(n>>i&1);
	reverse(begin(s),end(s));
	return s;
}

int main()
{
	int ss[]={
		btoi("0111111"), // 0
		btoi("0000110"), // 1
		btoi("1011011"), // 2
		btoi("1001111"), // 3
		btoi("1100110"), // 4
		btoi("1101101"), // 5
		btoi("1111101"), // 6
		btoi("0100111"), // 7
		btoi("1111111"), // 8
		btoi("1101111"), // 9
	};
	
	for(int n;cin>>n,~n;){
		int c=0;
		while(n--){
			int x; cin>>x;
			to_string(x);
			cout<<itob(c^ss[x])<<endl;
			c=ss[x];
		}
	}
	
	return 0;
}

C++: #include <cstdio>
#include <iostream>

using namespace std;

int main()
{
	char seg[10][7] = {
		{0, 1, 1, 1, 1, 1, 1},
	   	{0, 0, 0, 0, 1, 1, 0}, 
		{1, 0, 1, 1, 0, 1, 1},
	   	{1, 0, 0, 1, 1, 1, 1}, 
		{1, 1, 0, 0, 1, 1, 0},
	   	{1, 1, 0, 1, 1, 0, 1}, 
		{1, 1, 1, 1, 1, 0, 1},
	   	{0, 1, 0, 0, 1, 1, 1}, 
		{1, 1, 1, 1, 1, 1, 1},
	   	{1, 1, 0, 1, 1, 1, 1}
	};
	int n, m;
	char dis[7];

	while (1){
		scanf("%d", &n);
		if (n == -1){
			break;
		}

		for (int i = 0; i < 7; i++){
			dis[i] = 0;
		}

		for (int i = 0; i < n; i++){
			scanf("%d", &m);
			for (int j = 0; j < 7; j++){
				if (dis[j] != seg[m][j]){
					dis[j] = seg[m][j];
					printf("1");
				}
				else {
					printf("0");
				}
			}
			printf("\n");
		}
	}

	return (0);
}

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

int main(){
  int n ,num;
  string seg="0000000"; // a b c d e f g の順
  string set[10]={ /* 各数字のビット */
    "0111111", // 0
    "0000110", // 1
    "1011011", // 2
    "1001111", // 3
    "1100110", // 4
    "1101101", // 5
    "1111101", // 6
    "0100111", // 7
    "1111111", // 8
    "1101111"  // 9
  };

  while( true ){ // -1まで
    cin >> n;
    if( n == -1 ){
      break;
    }

    for( int i=0 ; i<n ; i++ ){
      cin >> num;
      for( int j=0 ; j<7 ; j++ ){
	if( seg[j] != set[num][j] ){ // ビットが違ったら
	  cout << '1';
	}
	else{ // 同じなら
	  cout << '0' ;
	}
      }
      seg = set[num];
      cout << endl;
    }

    seg = "0000000"; // セグメントを0のに初期化
  }
}

C++: #include<iostream>
using namespace std;
int main()
{

while(1)
{
int n,num,j=0;
string sig="0000000",str;
cin>>n;
if(n==-1)break;
for(int k=0;k<n;k++)
{
cin>>num;
string ans="";

if(num==0)str="0111111";
else if(num==1)str="0000110";
else if(num==2)str="1011011";
else if(num==3)str="1001111";
else if(num==4)str="1100110";
else if(num==5)str="1101101";
else if(num==6)str="1111101";
else if(num==7)str="0100111";
else if(num==8)str="1111111";
else str="1101111";
for(int i=0;i<7;i++)
{
if(sig.at(i)!=str.at(i))ans+='1';
else ans+='0';
}
sig=str;
cout<<ans<<endl;
}
}
return 0;
}

C++: #include<iostream>
using namespace std;
int main()
{

while(1)
{
int n,num,j=0;
string sig="0000000",str;
cin>>n;
if(n==-1)break;
for(int k=0;k<n;k++)
{
cin>>num;
string ans="";

if(num==0)str="0111111";
else if(num==1)str="0000110";
else if(num==2)str="1011011";
else if(num==3)str="1001111";
else if(num==4)str="1101101";
else if(num==5)str="1101101";
else if(num==6)str="1111101";
else if(num==7)str="0100111";
else if(num==8)str="1111111";
else str="1101111";
for(int i=0;i<7;i++)
{
if(sig.at(i)!=str.at(i))ans+='1';
else ans+='0';
}
sig=str;
cout<<ans<<endl;
}
}
return 0;
}

C++: #include<iostream>
#include<algorithm>
#include<functional>
using namespace std;
int main(){
	//gfedcba1101101
	int n;
	bool  table[10][7]={{0,1,1,1,1,1,1},{0,0,0,0,1,1,0},{1,0,1,1,0,1,1},{1,0,0,1,1,1,1},{1,1,0,0,1,1,0},{1,1,0,1,1,0,1},{1,1,1,1,1,0,1},{0,1,0,0,1,1,1},{1,1,1,1,1,1,1},{1,1,0,1,1,1,1}};
	while(cin>>n,n!=-1){
		bool now[7]={0,0,0,0,0,0,};
		for(int i=0;i<n;i++){
			int tmp;
			cin>>tmp;
			for(int i=0;i<7;i++){
				if(now[i]==table[tmp][i])cout<<0;
				else cout<<1;
				if(i==6)cout<<endl;
			}
			for(int i=0;i<7;i++)now[i]=table[tmp][i];
		}
	}
	return 0;
}

C++: #include<bits/stdc++.h>
using namespace std;
const int INF = 1 << 30;

bool lookup[][7] = {
  {1,1,1,1,1,1,0},
  {0,1,1,0,0,0,0},
  {1,1,0,1,1,0,1},
  {1,1,1,1,0,0,1},
  {0,1,1,0,0,1,1},
  {1,0,1,1,0,1,1},
  {1,0,1,1,1,1,1},
  {1,1,1,0,0,1,0},
  {1,1,1,1,1,1,1},
  {1,1,1,1,0,1,1}
};
int main()
{
  int n;
  while(cin >> n, ~n) {
    bool display[7] = {};
    while(n--) {
      int digit;
      cin >> digit;
      for(int i = 6; i >= 0; i--) {
        cout << (lookup[digit][i] ^ display[i]);
        display[i] = lookup[digit][i];
      }
      cout << endl;
    } 
  }
}

C++: #include <iostream>
#include <vector>
#include <algorithm>
constexpr int DISPLAY[] = { 0b0111111, 0b0000110, 0b1011011, 0b1001111, 0b1100110, 0b1101101, 0b1111101, 0b0100111, 0b1111111, 0b1101111, 0 };
void show(int n) {
	for (int i = 6; i >= 0; --i) {
		std::cout << ((((1 << i) & n) == 0) ? 0 : 1);
	}
	std::cout << std::endl;
}
int main() {
	int n;
	int prev_state, d;
	std::cin >> n;
	while (n != -1) {
		prev_state = 10;
		for (auto i = 0; i < n; ++i) {
			std::cin >> d;
			show(DISPLAY[prev_state] ^ DISPLAY[d]);
			prev_state = d;
		}
		std::cin >> n;
	}

}

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

const string number_bits[11] =
{
    "0111111",
    "0000110",
    "1011011",
    "1001111",
    "1100110",
    "1101101",
    "1111101",
    "0100111",
    "1111111",
    "1101111",
    "0000000"
};

int main()
{
    while(1)
    {
        int n;
        int cur_d;
        int pre_d = 10;
        cin >> n;
        if(n == -1)
        {
            break;
        }
        for(int i=0; i<n; i++)
        {
            string ans;
            cin >> cur_d;
            
            for(int j=0; j<7; j++)
            {
                if(number_bits[cur_d][j] == number_bits[pre_d][j])
                {
                    ans += "0";
                }
                else
                {
                    ans += "1";
                }
            }
            pre_d = cur_d;
            cout << ans << endl;
        }
    }
    return 0;
}

C++: #include <iostream>

using namespace std;

const string num[10] = {"0111111", "0000110", "1011011",
                        "1001111", "1100110", "1101101",
                        "1111101", "0100111", "1111111",
                        "1101111"};
int main()
{
    int n;

    while (cin >> n, n != -1) {
        string state = "0000000";

        for (int i = 0; i < n; i++) {
            int inp; 
            
            cin >> inp;
            for (int i = 0; i < 7; i++)
                if (num[inp][i] != state[i]) 
                    state[i] = '1';
                else
                    state[i] = '0';
            cout << state << endl;
        }
    }

    return 0;
}

C++: #include <iostream>
using namespace std;
int main (){
  int  d[10][7] ={{0,1,1,1,1,1,1},
		  {0,0,0,0,1,1,0},
		  {1,0,1,1,0,1,1},
		  {1,0,0,1,1,1,1},
		  {1,1,0,0,1,1,0},
		  {1,1,0,1,1,0,1},
		  {1,1,1,1,1,0,1},
		  {0,1,0,0,1,1,1},
		  {1,1,1,1,1,1,1},
		  {1,1,0,1,1,1,1}};

  int n;
  while(cin>>n && n!=-1){
    int  s[7] = {0,0,0,0,0,0,0};
    for(int i=0;i<n;i++){
      int a;
      cin >>a;
      for(int j=0;j<7;j++){
	if(s[j]!=d[a][j]){
	  cout<<1;
	  s[j]=d[a][j];
	}
	else cout <<0;
      }
      cout <<endl;
    }
  }
  return 0;
}