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…
どうしてプログラマに…プログラムが書けないのか? なんだかんだで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>…
負値に対応した逆ポーランド記法の式を計算するプログラム。例えば "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>…
#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