FLYING

/* TODO: 気の利いた説明を書く */

c/c++

パスワード入力を実装するのはさりげなく面倒

ユーザ認証とかでよくある、パスワードが「*」で表示されるアレを作りたい話。簡単にできるかと思いきや、これが結構面倒だった。それというのもgetch()って関数がBackSpace, Delete, Functionキー等々、パスワード入力には必要のない文字までご丁寧に返して…

循環小数を分数に変換するよ!

#define round(x) ((x >= 0) ? (int)(x + 0.5) : (int)(x - 0.5)) #define absolute(x) ((x >= 0) ? x : -x) #define LIMIT 1.0E-6 // 循環小数を分数に変換 void double_to_frac(double n, int m) { int a, b, xa = 1, xb = 1, p = 1; // p = 10^m while (m…

FizzだのBuzzだの

どうしてプログラマに…プログラムが書けないのか? なんだかんだで5分くらいか掛かってる罠。 #include <stdio.h> int main() { int i; for (i = 1; i <= 100; i++) { if (i % 15 == 0) printf("FizzBuzz\n"); else if (i % 3 == 0) printf("Fizz\n"); else if (i % 5</stdio.h>…

逆ポーランドその2

負値に対応した逆ポーランド記法の式を計算するプログラム。例えば "60 -4 3 * /" とか入力すると -5 が返ってくる。 #include <stdio.h> #define STACK_SIZE 100 #define MAX_LEN 100 int stack[STACK_SIZE]; int stack_size = 0; // スタックから出す int pop() { i</stdio.h>…

逆ポーランドその1

#include <stdio.h> #define STACK_SIZE 100 int stack[STACK_SIZE]; int stack_size = 0; int pop() { if (stack_size <= 0) return 0; return stack[--stack_size]; } int push(int a) { stack[stack_size++] = a; } int calc(char *s) { int a, b, type; while (*s</stdio.h>…

まだまだ多倍長整数

昨日の日記で理論的には無限の数を表現できると書いたけど、桁を扱う変数の制限から、現在の実装では 0 〜 65536^65534 - 1 までしか表せないことに気付いた*1。更に、2つの多倍長数を掛け算する場合は、2数の桁数の合計が 65535 を超えてはいけないことも発…

続・多倍長整数

とりあえず、自然数の加減乗除と比較・代入はできるようになった。その威力を手っ取り早く示すために、1000の階乗を計算してみた。コードは以下のような感じで。 int main() { bigshort a; // 多倍長数aを宣言 int i; init(a, 10000); // aを10000桁で初期化…

多倍長整数って凄くね?

多倍長整数ヤバい。マジヤバい。どのくらいヤバいかっていうと、メモリと時間さえ許せば、無限大の整数を表現できるぐらいヤバい。とにかくヤバいと思ったので、自分で作ってみたくなった。でも一から作るほどの腕はないので、どこかのライブラリを参考にし…

プログラムのコードを書いてみる

ちゃんとプログラムのコードを示すときの記法も用意されてるっぽい。 double square_root(double n) { int i; double min, center, max; if (n < 0) return -1.0; for (i=0; i*i