C言語で入力した数字で10が作れるかどうかを確認するMake10作りました。
試しに色々な数字を入れて確認しましたが、「8115」が解けません。
(8÷(1-(1÷5)))=10
になるのを期待したんだけどなぁ。
Floatとかdouble使うしかないのでしょうか。
C
1#include <stdio.h> 2 3typedef int (*Op)(int, int); 4int add(int a, int b) { return (a + b); } 5int sub(int a, int b) { return (a - b); } 6int mul(int a, int b) { return (a * b); } 7int div(int a, int b) { return b ? (a / b) : 9999; } 8 9Op o[] = { add, sub, mul, div }; 10char* op_str[] = { "+", "-", "×", "÷" }; 11 12int main() { 13 int num[4] = { 0 }; 14 int a, b, c, d; // オペランド 15 int i, j, k; // 演算子 16 int n; 17 18 // 標準入力(エラーチェックなし) 19 char str[256]; 20 printf("4桁の数字を入力してください。\n"); 21 scanf_s("%s", str,256); 22 printf("入力値は「%s」です。\n", str); 23 24 a = str[0] - '0'; 25 b = str[1] - '0'; 26 c = str[2] - '0'; 27 d = str[3] - '0'; 28 29 for (i = 0; i < 4; i++) { 30 for (j = 0; j < 4; j++) { 31 for (k = 0; k < 4; k++) { 32 // (a+b)+(c+d) 33 if (o[j](o[i](a, b), o[k](c, d)) == 10) { 34 printf("(%d %s %d) %s (%d %s %d)\n", a, op_str[i], b, op_str[j], c, op_str[k], d); 35 } 36 37 // {(a+b)+c}+d 38 if(o[k](o[j](o[i](a, b), c),d) == 10){ 39 printf("{(%d %s %d) %s %d} %s %d\n", a, op_str[i], b, op_str[j], c, op_str[k], d); 40 } 41 42 // a+{b+(c+d)} 43 if (o[i](a, o[j](b, o[k](c, d))) == 10) { 44 printf("%d %s {%d %s (%d %s %d)}\n", a, op_str[i], b, op_str[j], c, op_str[k], d); 45 } 46 47 // {a+(b+c)}+d 48 if(o[k](o[i](a, o[j](b, c)), d) == 10){ 49 printf("{%d %s (%d %s %d)} %s %d\n", a, op_str[i], b, op_str[j], c, op_str[k], d); 50 } 51 // a+{(b+c)+d} 52 if (o[i](a, o[k](o[j](b, c), d)) == 10) { 53 printf("%d %s {(%d %s %d) %s %d}\n", a, op_str[i], b, op_str[j], c, op_str[k], d); 54 } 55 } 56 } 57 } 58}
回答3件
あなたの回答
tips
プレビュー