完全不理解意思
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
// 等式字节数
#define EQ_MAX 100
// 每个数字的最大位数
#define NUM_LEN_MAX 10
// 等式 a+b=c 或者 a-b=c
char equation[EQ_MAX];
int a, b, c;
// 操作符, + = 1, - = -1
int op;
char op_c;
// ABC的位数
int len_a, len_b, len_c;
// 搜索的起始和结束数字
int start_a, start_b, start_c;
int end_a, end_b, end_c;
int mypow(x, y)
{
int i;
int v = 1;
for (i = 0; i < y; ++i) {
v *= x;
}
return v;
}
void init_x(char *p0, char **pp1, int *x, int *len_x, int *start_x, int *end_x)
{
*x = strtol(p0, pp1, 10);
*len_x = *pp1-p0;
*start_x = mypow(10, *len_x - 1);
*end_x = mypow(10, *len_x) - 1;
}
int strdiff(char *x, char *y, int len)
{
int count = 0;
int i;
for (i = 0; i < len; ++i) {
if (x[i] != y[i]) {
count++;
}
}
return count;
}
// 初始化计算变量
int init(void)
{
char *p0, *p1;
p0 = &equation[0];
int i;
// a
init_x(p0, &p1, &a, &len_a, &start_a, &end_a);
// op
op_c = *p1;
if ('+' == *p1) {
op = 1;
} else if ('-' == *p1) {
op = -1;
} else {
exit(0);
}
// b
p0 = p1+1;
init_x(p0, &p1, &b, &len_b, &start_b, &end_b);
// c
p0 = p1+1;
init_x(p0, &p1, &c, &len_c, &start_c, &end_c);
}
void cal()
{
int loop_a, loop_b, loop_c;
int diff_num;
int result_count = 0;
int min_a = 0, min_b = 0, min_c = 0;
char new_eq[EQ_MAX];
int eq_len = strlen(equation);
// 比较简单的计算, 直接用三重循环实现
for (loop_a = start_a; loop_a <= end_a; ++loop_a) {
for (loop_b = start_b; loop_b <= end_b; ++loop_b) {
for (loop_c = start_c; loop_c <= end_c; ++loop_c) {
// 检验算式是非成立
if (loop_a + op * loop_b != loop_c) {
continue;
}
// 算式成立, 判断差异
snprintf(&new_eq[0], EQ_MAX, "%d%c%d=%d", loop_a, op_c, loop_b, loop_c);
diff_num = strdiff(&equation[0], &new_eq[0], eq_len);
if (diff_num <= 3) {
result_count ++;
if (0 == min_a) {
min_a = loop_a;
min_b = loop_b;
min_c = loop_c;
}
}
}
}
}
printf("%d\n", result_count);
printf("%d%c%d=%d\n", min_a, op_c, min_b, min_c);
}
int main(void)
{
scanf("%s", &equation[0]);
init();
cal();
return 0;
}