AOJ 0228 - Seven Segments

ビット演算をつかいました.
XORをつかいます.

#include <cstdio>

void binarywrite(int n){
	for(int i=6;i>=0;i--){
		printf("%d", (n >> i & 1));
	}
	puts("");
}

int main(){
	int lights[] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x27, 0x7f, 0x6f};
	int n = 0;
	while(scanf("%d", &n), ~n){
		int prev_light = 0;
		for(int i=n;i;i--){
			int j;
			scanf("%d", &j);
			binarywrite(prev_light ^ lights[j]);
			prev_light = lights[j];
		}
	}
	return 0;
}

なお,次のコードはRuntime Errorが多発して諦めたコードです.(D言語)
少しずつ使う機能を減らして試してみたのですがよく分かりませんでした.

import std.stdio;

void binarywrite(int n){
	for(int i=6;i>=0;i--){
		write(n >> i & 1);
	}
	writeln("");
}

int main(){
	int[] lights = [0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x27, 0x7f, 0x6f];
	int n = 0;
	while(readf("%d\n", &n), ~n){
		int prev_light = 0;
		for(int i=n;i;i--){
			int j;
			readf("%d\n", &j);
			binarywrite(prev_light ^ lights[j]);
			prev_light = lights[j];
		}
	}
	return 0;
}