112日目 整数の乗除を加減記号で実装(途中ww)

パズルみたいで面白かったけれども実用とかけ離れてるwww


注1:コマンドライン引数を使用してます
注2:めちゃめちゃですww

割られる数<割る数でもオッケー、ただし両方10のn乗

#include <stdio.h> /* division, if(a < b, both a and b included in pow(10,x))*/
#include <stdlib.h>

int divi(int a, int b);

int main(int argc, char *argv[])
{
    int a = atoi(argv[1]), b = atoi(argv[2]);
    int i , j, num;
    if (b == 0)
        printf("error: zero divisior");
    else if (a >= b)
        printf("%d", divi(a, b));
    else if (a < b) {
        for (i = 0, num = a; divi(num, b) <= 1; ++i)
            num *= 10;
        printf("0.");
        for (j = 0; j < i-1; ++j)
            printf("0");
        printf("%d", divi(num, b));
    }
}

int divi(int a, int b)
{
    int i;
    for (i = 0; a > 0; i++)
        a -= b;
    return i;
}

モジュロ

#include <stdio.h> /* modulo */
#include <stdlib.h>

int mod(int a, int b)
{
    while (a >= b)
        a -= b;
    return a;
}

int main(int argc, char *argv[])
{
    int a = atoi(argv[1]), b = atoi(argv[2]);
    (b != 0) ? (printf("%d", mod(a, b))) : (printf("error: zero divisior"));
}

割られる数≧割る数(両方整数) 小数点切り上げ中

#include <stdio.h> /* division, if(dividend >= divisor) */
#include <stdlib.h>

int divi(int a, int b)
{
    int i;
    for (i = 0; a > 0; i++)
        a -= b;
    return i;
}

int main(int argc, char *argv[])
{
    int a = atoi(argv[1]), b = atoi(argv[2]);
    (b != 0) ? (printf("%d", divi(a, b))) : (printf("error: zero divisior"));
}

乗算

#include <stdio.h> /* multiply */
#include <stdlib.h>

int mtp(int a, int b)
{
    int i, num = 0;
    for (i = 0; i < b; i++)
        num += a;
    return num;
}

int main(int argc, char *argv[])
{
    int a = atoi(argv[1]), b = atoi(argv[2]);
    printf("%d", mtp(a, b));
}


参考文献

いやでも楽しめる算数 (講談社文庫)

いやでも楽しめる算数 (講談社文庫)