计算机的底层逻辑会出问题吗
查看原帖
计算机的底层逻辑会出问题吗
643246
2091088157xd楼主2022/2/16 23:38

我代码在通过第二个测试点时,我发现加法和减法会出错,但是乘法不会出错,这是为什么啊,有大哥了解吗

#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
我快麻了,为什么加减法会出错啊
2022/2/16 23:38
加载中...