问题遇到的现象和发生背景
dev5.11高精度减法
遇到的现象和发生背景,请写出第一个错误信息
无输出
用代码块功能插入代码,请勿粘贴截图。 不用代码块回答率下降 50%
#include<stdio.h>
#include<string.h>
int main()
{
void High_Precision_Subtraction(char subtrahend[], int length_subtrahend, char subtractor[], int length_subtractor, int answer[], int size_answer, int* flag);
char a[100], b[100];
int c[100];
scanf("%s", a);
scanf("%s", b);
int l1, l2, l3;
l1 = strlen(a);
l2 = strlen(b);
l3 = (l1 > l2) ? l1 : l2;
int flag;
High_Precision_Subtraction(a[100], l1, b[100], l2, c[100], l3, &flag);
if (flag != 0)
{
printf("%s", c[100]);
}
else
{
printf("0");
}
return 0;
}
void High_Precision_Subtraction(char subtrahend[], int length_subtrahend, char subtractor[], int length_subtractor, int answer[], int size_answer, int* flag)
{
//为了保证输入输出的格式统一,所以传入了answer这个指针,而不是直接在原字符串进行加减
int length_max, length_min;
if (length_subtrahend < length_subtractor)
{
length_max = length_subtractor;
length_min = length_subtrahend;
}
else
{
length_max = length_subtrahend;
length_min = length_subtractor;
}
//确定长度
int temp_ans[100]={0};
//memset(temp_ans, 0, sizeof(temp_ans));
int i;
if ((length_subtrahend < length_subtractor) || ((length_subtrahend ==length_subtractor) && strcmp(subtrahend, subtractor) < 0)) //先比大小
{
*flag = -1;
for (i = 0; i < length_min; i++)
{//个位对齐开始作差
temp_ans[i] += subtractor[length_max - i - 1] - subtrahend[length_min - i - 1];
if (temp_ans[i] < 0)
{//当前位是个负数,就向高位借个1就足够了
temp_ans[i + 1] -= 1;
temp_ans[i] += 10;
} //完成进位
}
for (i = length_min; i < length_max; i++)
{//把剩下的抄回来
temp_ans[i] = temp_ans[i] + subtractor[length_max - i - 1] - '0';//temp_ans[min]可能是-1,之后的均为0
}
}
else if ((length_subtrahend >length_subtractor) || ((length_subtrahend ==length_subtractor) && strcmp(subtrahend, subtractor) >0))
{
*flag = 1;
for (i = 0; i < length_min; i++)
{
temp_ans[i] += subtrahend[length_max - i - 1] - subtractor[length_min - i - 1];//倒序
if (temp_ans[i] < 0)
{//当前位是个负数,就向高位借个1就足够了
temp_ans[i + 1] -= 1;
temp_ans[i] += 10;
} //完成进位
}
for (i = length_min; i < length_max; i++)
{
temp_ans[i] = temp_ans[i] + subtrahend[length_max - i - 1] - '0';
}
}
else
{
*flag = 0;//两数相等
}
//完成相减,并确保是大数减小数
int last;
last = 0;
for (i = length_max - 1;i >= 0;i--)
{//找到最高位
if (temp_ans[i] == 0 && temp_ans[i - 1] != 0)
{
last = i;
break;
}
}
//直接逆着赋值
for (i = 0;i <= last;i++)
{
answer[i] = temp_ans[last - i];//输出到answer里面
}
}
运行结果及详细报错内容
无输出
我的解答思路和尝试过的方法,不写自己思路的,回答率下降 60%
用vs调试过,不过没看懂