我代码在通过第二个测试点时,我发现加法和减法会出错,但是乘法不会出错,这是为什么啊,有大哥了解吗
#include<stdio.h>
#include<string.h>
#include<math.h>
void func(int k1, char answer[12])
{
int i = 0, k2 = k1, n = 0;
while (k2 != 0)
{
k2 /= 10;
n++;
}
while (k1 != 0)
{
answer[n - 1 - i] = k1 % 10 + '0';
k1 /= 10;
i++;
}
answer[n] = '\0';
}
void fun(char m1[6], char m2[6], char x, char m4[12])//由于题设简单,没必要追求高精度
{
int answer, k1, k2, i;
k1 = atof(m1);
k2 = atof(m2);
if (x == 'a')
{
func(k2+k1, m4);
}
else if (x == 'b')
{
if (k1 > k2)
{
func(k1 - k2, m4);
}
else if (k1 < k2)
{
func(k2 - k1, m4);
char m5[12]="-";
strcat(m5, m4);
strcpy(m4, m5);
strcpy(m5, "");
}
else {
strcpy(m4, "0");
}
}
else if (x == 'c')
{
func(k1 * k2, m4);
}
}
int main()
{
int i, j, n,h[51];
char m1[6], m2[6], m3[6], answer[51][23] = { "1" }, mark, kkk[12];
scanf("%d", &i);
for (n = 0; n < i; n++)
{
scanf("%s", m1);
if (m1[0] != 'a' && m1[0] != 'b' && m1[0] != 'c')
{
scanf("%s", m2);
if (mark == 'a')
{
strcpy(answer[n], m1);
strcat(answer[n], "+");
strcat(answer[n], m2);
strcat(answer[n], "=");
fun(m2, m3, mark, kkk);
strcat(answer[n], kkk);
strcpy(kkk, "");
}
else if (mark == 'b')
{
strcpy(answer[n], m1);
strcat(answer[n], "-");
strcat(answer[n], m2);
fun(m2, m3, mark, kkk);
strcat(answer[n], "=");
strcat(answer[n], kkk);
strcpy(kkk, "");
}
else {
strcpy(answer[n], m1);
strcat(answer[n], "*");
strcat(answer[n], m2);
strcat(answer[n], "=");
fun(m2, m3, mark, kkk);
strcat(answer[n], kkk);
strcpy(kkk, "");
}
}
else {
mark = m1[0];//储存上次运算类型的标志
scanf("%s", m2);
scanf("%s", m3);
if (m1[0] == 'a')
{
strcpy(answer[n], m2);
strcat(answer[n], "+");
strcat(answer[n], m3);
strcat(answer[n], "=");
fun(m2, m3, m1[0], kkk);
strcat(answer[n], kkk);
strcpy(kkk, "");
}
else if(m1[0]=='b')
{
strcpy(answer[n], m2);
strcat(answer[n], "-");
strcat(answer[n], m3);
fun(m2, m3, m1[0], kkk);
strcat(answer[n], "=");
strcat(answer[n], kkk);
strcpy(kkk, "");
}
else {
strcpy(answer[n], m2);
strcat(answer[n], "*");
strcat(answer[n], m3);
strcat(answer[n], "=");
fun(m2, m3, m1[0], kkk);
strcat(answer[n], kkk);
strcpy(kkk, "");
}
}
}
for (n = 0; n < i; n++)
{
printf("%s\n%d\n", answer[n],strlen(answer[n]));
}
return 0;
}```
例子:2620*6343=16618660
18
216+1149=1365
13
7761-5655=2106
14
7168-3961=3207
14
9755+3461=13216
15
但计算结果却是
2620*6343=16618660
18
216+1149=1365
13
7761-5655=2106
14
7168-3961=-1694
15
9755+3461=13216
15
我快麻了,为什么加减法会出错啊