单向链表长整数加法 java_c语言 用链表实现 超长整型加减法 (doing)

标签:

1 #include

2 #include

3 #include

4 structdulnode5 {6 intdata;7 struct dulnode *next,*prev;8 };9 typedef structdulnode DULNODE;10 typedef DULNODE *DULINKLIST;11 intmain()12 {13 DULNODE fuc_creat(DULNODE NUM);14 intfuc_print(DULNODE NUM);15 intfuc_compe(DULNODE NUM1,DULNODE NUM2);16 intfuc_plus(DULNODE NUM1,DULNODE NUM2);17 intfuc_sub(DULNODE NUM1,DULNODE NUM2);18 DULNODE NUM1={NUM1.data=0};19 NUM1=fuc_creat(NUM1);20 fuc_print(NUM1);21 return 1;22 }23 DULNODE fuc_creat(DULNODE NUM)24 {25 DULINKLIST p,q;26 int i=0,block=0,j=1;27 int temp[100];28 char str[101];29 gets(str);30 q=&NUM;31 for(i=0;i<100&&str[i]!=‘\0‘;i++)32 {33 if(str[i]‘9‘)printf("input error");34 temp[i]=str[i]-‘0‘;35 //printf("test_1 %d\n",temp[i]);

36 }37 for(i=i-1;i>-1;i--)38 {39 q->data=q->data+j*temp[i];40 block++;41 j=j*10;42 if(block%4==0)43 {44 p=(DULNODE *)malloc(sizeof(DULNODE));45 p->data=0;46 p->next=q;47 p->prev=&NUM;48 q->prev=p;49 NUM.next=p;50 q=p;51 j=1;52 }53 //printf("test_2%d\n",q->data);

54 }55 returnNUM;56 }57 intfuc_print(DULNODE NUM)58 {59 printf("test_1 print\n");60 DULINKLIST q;61 q=NUM.next;62 do

63 {64 printf("%d",q->data);65 q=q->next;66 }while(q==&NUM);67 printf("test_2 print\n");68 return 1;69 }

vim+gcc+gdb大法好;linux下编程妙。

插播个连接:vim命令+gdb命令http://pan.baidu.com/s/1pJKChHT 文件来自百度文库,可自行查找

1:学会调试。自从学了这招,再也不在程序里插播printf(test")代码啦!

2:malloc函数 头文件  使用 p=(int */*要返回的类型,强制转换给p*/)malloc(n/*分配几个*/*sizeof(int/*分配给p的长度*/))。malloc开辟的空间会使p指向新开辟的地址,从而失去原来的指向,有必要的话请提前保留p的信息。代码44行

3:函数类型定义 定义为int型则该函数return的值为该类型。代码23定义,代码55返回,代码19接收返回值。

4:结构体指针指向结构体内数据  q->data   (*q).data推荐前面那个写法。

5:结构体赋初值 可以写构造函数(c++?)或者在定义的时候直接赋值,每个元素间用 逗号 连接 struct delnode NUM1={NUM1.data=0} 代码18行

6:软件工程思维  需要提前想好软件大体怎么写,什么函数实现什么功能。likes 吾等弱鸡状态下,更需如此。建议先写main函数,这样调试时省力。

标签:

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个用 C 语言实现单向链表超长整数加法的程序: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct Node { int digit; struct Node *next; } Node; Node *create_node(int digit) { Node *node = (Node *) malloc(sizeof(Node)); node->digit = digit; node->next = NULL; return node; } Node *add_digit(Node *head, int digit) { Node *node = create_node(digit); node->next = head; return node; } Node *add_long_int(Node *num1, Node *num2) { Node *result = NULL; int carry = 0; while (num1 != NULL || num2 != NULL) { int sum = carry; if (num1 != NULL) { sum += num1->digit; num1 = num1->next; } if (num2 != NULL) { sum += num2->digit; num2 = num2->next; } carry = sum / 10; result = add_digit(result, sum % 10); } if (carry > 0) { result = add_digit(result, carry); } return result; } void print_long_int(Node *num) { while (num != NULL) { printf("%d", num->digit); num = num->next; } printf("\n"); } int main() { char str1[1000], str2[1000]; printf("请输入两个任意整数:\n"); scanf("%s%s", str1, str2); int len1 = strlen(str1), len2 = strlen(str2); Node *num1 = NULL, *num2 = NULL; for (int i = len1 - 1; i >= 0; i--) { num1 = add_digit(num1, str1[i] - '0'); } for (int i = len2 - 1; i >= 0; i--) { num2 = add_digit(num2, str2[i] - '0'); } Node *result = add_long_int(num1, num2); printf("结果为:\n"); print_long_int(result); return 0; } ``` 这个程序可以读入两个任意整数,用单向链表存储,然后实现加法运算,最后输出结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值