先发出来代码,大家可以跑跑看。
tp.h 文件:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef unsigned int Byte;
typedef struct {
int sign; /* 0 for pos and 1 for neg */
int size;
Byte *tab;
} bignum;
#define BASE 10
#define MAX(a, b) (((a) > (b)) ? (a) : (b))
#define MIN(a, b) (((a) < (b)) ? (a) : (b))
void init(char *s, bignum *n) {
int pos = 0;
if (s[0] == '-') {
n->sign = 1;
n->size = strlen(s) - 1;
// n->tab = calloc(n->size, sizeof(unsigned char));
n->tab = (Byte *)malloc(n->size * sizeof(unsigned char));
for (int i = n->size; i > 0; i--) {
n->tab[pos] = s[i];
pos++;
}
} else {
n->sign = 0;
n->size = strlen(s);
// n->tab = calloc(n->size, sizeof(unsigned char));
n->tab = (Byte *)malloc(n->size * sizeof(unsigned char));
for (int i = n->size - 1; i >= 0; i--) {
n->tab[pos] = s[i];
pos++;
}
}
// free(n->tab);
}
void showBigNum(bignum n) {
if (n.sign == 1) {
printf("-");
}
for (int i = n.size - 1; i >= 0; i--) {
printf("%d", n.tab[i] - '0');
}
}
tp.c 文件:
```C
#include "tp2.h"
int main(int argc, char *argv[]) {
if (argc != 3) {
printf("Please type 2 numbers as input\n");
exit(1);
}
bignum a, b;
init(argv[1], &a);
/* You can try to comment the line below and start again, then you can see the difference */
init(argv[2], &b);
showBigNum(a);
return 0;
}
可以试试:
**注释掉** 和 **不注释掉** *init(argv[2], &b);* 分别输出什么。
gcc tp.c ; ./a.out 255555 122577
理论上都应该输出 255555.
求大佬帮助修改,并指出原因。
鱼和渔都想要,不要熊掌……
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.