/* L04.c 法演算関数と数当て手品 */ #include #include /* a を法 n の数に取り直す */ int mod(int a, int n) { int b=a%n; return b<0 ? b+n : b; // C言語では a<0, n>0 のときの符号は処理系に依存 } /* 法 n での a+b */ int modadd(int a, int b, int n) { return mod(a+b,n); } /* 法 n での a-b */ int modsub(int a, int b, int n) { return mod(a-b,n); } /* 法 n での a*b */ int modmul(int a, int b, int n) { return mod(a*b,n); } main() { int a,b,c,x,y,z,ans; printf("2 桁の好きな数字を思い浮かべてください。\n"); printf("その数を 3 で割った余りはいくつですか。"); scanf("%d",&a); printf("その数を 5 で割った余りはいくつですか。"); scanf("%d",&b); printf("その数を 7 で割った余りはいくつですか。"); scanf("%d",&c); x = modmul(70,a,105); y = modmul(21,b,105); z = modmul(15,c,105); ans = modadd(modadd(x,y,105),z,105); printf("それは %d ですね。\n",ans); } /* 実行例: 2 桁の好きな数字を思い浮かべてください。 その数を 3 で割った余りはいくつですか。1 その数を 5 で割った余りはいくつですか。2 その数を 7 で割った余りはいくつですか。2 それは 37 ですね。 */