len = *num - i;
temp = (char *)malloc(len);
strncpy(temp, &res[i], len);
strncpy(res, temp, len);
free(temp);
}
}
}
void big_sub(const char *num1, const char *num2, char *res)
{
//res存储计算后的结果
int len1 = strlen(num1);
int len2 = strlen(num2);
int i, j, k, num;
char flag = 0, flag_negetive = 0;//进位标志
char *temp_res, temp;//临时存取结果
i = len1 - 1;
j = len2 - 1;
k = big_cmp(num1, &len1, num2, &len2);
if (k == 0) {
//相等
res[0] = 0x30;
res[1] = '\0';
} else {
//不等
num = get_allocate_num(&len1, &len2);
temp_res = (char *)malloc(num);
if (k == -1) {//始终让num1指向较大数,同时也改变数据的长度
k = (int)num1;
num1 = num2;
num2 = (const char *)k;
k = i;
i = j;
j = k;
flag_negetive = 1;
}
for (k = num - 1; k > 0; k--) {
if (j >= 0) {
if (k == 1 && i == 0 && j == 0) {//位数相同
temp_res[1] = num1[0] - num2[0] - flag + 0x30;
if (flag_negetive == 1) {//结果为负数
strncpy(&res[1], &temp_res[1], num-1);
res[0] = '-';
res[num] = '\0';
} else {
strncpy(res, &temp_res[1], num-1);
res[num-1] = '\0';
}
} else {
temp = num1[i--] - num2[j--] - flag;
temp_res[k] = temp + 0x3a;
flag = 0x01;
} else {
temp_res[k] = temp + 0x30;
flag = 0x0;
}
}
} else {
temp = num1[i--] - flag;
if (k == 1) {//最后一位
if (temp > 0x30) {
temp_res[1] = temp;
if (flag_negetive == 1) {//结果为负数
temp_res[0] = '-';//添加负号
strncpy(res, temp_res, num);
res[num] = '\0';
} else {
strncpy(res, &temp_res[1], num-1);
res[num-1] = '\0';
}
} else {//有借位
if (flag_negetive == 1) {//结果是负数
temp_res[1] = '-';
strncpy(res, &temp_res[1], num-1);
res[num-1] = '\0';
} else {
strncpy(res, &temp_res[2], num-2);
res[num-2] = '\0';
}
}
} else {
if (temp >= 0x30) {
temp_res[k] = temp;
flag = 0x0;
} else {//有借位
temp_res[k] = temp + 0xa;
flag = 0x01;
}
}
}
}
free(temp_res);
earse_zero(res, &num);
}
}
void big_mul(const char *num1, const char *num2, char *res)
{
int len1 = strlen(num1);//num1为乘数
in