#include <stdio.h> #include <stdbool.h> struct bign{ int d[200]; int len; int flag; }; typedef struct bign BigNum; void init(BigNum *a) { memset(a->d,0,sizeof(a->d)); a->len = 0; a-> flag = 1; } BigNum str_to_num(const char str[]) { BigNum res; init(&res); int len = strlen(str); res.len = len; for(int i = 0;i < len;i++) { if(str[len - 1-i] == '-') { res.len --; res.flag = -1; break; } else { res.d[i] = str[len - 1 - i] - '0'; } } return res; } bool is_zero(const BigNum *a) { if(a->len == 1 && a-> d[0] == 0) { return true; } else return false; } //比较绝对值得大小 int bign_cmp(const BigNum *a,const BigNum *b) { if(a->len > b-> len) { return 1; } else if(a->len < b->len) { return -1; } else { for(int i = a-> len-1;i >= 0;i --) { if(a->d[i] > b->d[i]) { return 1; } else if(a->d[i]<b->d[i]) return -1; } } return 0; } //高精度加法 BigNum_add(const BigNum *a,const BigNum *b) { BigNum res; bign(&res); int len; len = (a->len>b->len)?a->len:b->len; for(int i = 0;i < len;i++) { res.d[i] += a->d[i] + b->d[i]; if(res.d[i] >= 10) { res.d[i+1]++; res.d[i] -= 10; } } if(res.d[len] != 0) { len++; } res.len = len; res.flag = 1; return res; } BigNum_sub(BigNum *a,BigNum *b) { BigNum res; bign(&res); int len; if(cmp(a,b) < 0) { BigNum *tmp = a; a =b; b = tmp; res.flag = -1; } else { res.flag = 1; } len = a->len; for(int i = 0;i < len;i++) { if(a->d[i]<b->d[i]) { a->d[i+1]--; a->d[i] +=10; } res.d[i] = a->d[i] - b->d[i]; } while(len > 1 && res.d[len-1] == 0) { len--; } res.len = len; return res; } void print_bignum(const BigNum *a) { if(a->flag<0) { printf("-"); } for(int i = a->len-1;i>=0;i--) { printf("%d",a->d[i]); } printf("\n"); } int main() { char a, b; scanf("%s %s",&a,&b); init(a); BigNum_add(a,b); print_bignum(a); return 0; }完善该段代码
时间: 2024-02-15 09:27:27 浏览: 56
这段代码存在一些问题,需要进行修改和完善才能正常运行,我给您列举一下:
1. 在主函数中,您使用了字符变量 a 和 b 来输入两个大数,但实际上应该使用字符串类型的数组才能正确地输入大数,所以需要修改为 char a[200], b[200];
2. 在主函数中,您调用了 BigNum_add 函数来进行高精度加法,但是没有接收返回值,需要修改为 BigNum res = BigNum_add(&a, &b);
3. 在 BigNum_sub 函数中,您调用了 cmp 函数,但是该函数并未在代码中定义,需要修改为 bign_cmp 函数;
4. 在 BigNum_add 函数中,您使用了错误的函数名 bign,应该改为 init。
根据以上问题,完善后的代码如下:
阅读全文