汽车之家注册账号:编程题目:"长整数四则运算" 谁会哦,帮帮我啊,先谢谢了

来源:百度文库 编辑:神马品牌网 时间:2024/05/07 07:09:56
课程设计题目:长整数四则运算。
问题描述:设计一个实现任意长的整数进行加法运算的演示程序。
基本要求:利用双向循环链表实现长整数的存储,每个结点含一个整形变量。任何整形变量的范围是 -(2^15 - 1)~(2^15 - 1)。输入和输出形式:按中国对于长整数的表示习惯,每四位一组,组间用逗号隔开。
测试数据:
(1)0;0;应输出“0”。
(2)-2345,6789;-7654,3211;应输出“-1,0000,0000”。
(3)-9999,9999;1,0000,0000,0000;应输出“9999,0000,0001”。
(4)1,0001,0001;-1,0001,0001;应输出“0”。
(5)1,0001,0001;-1,0001,0000;应输出“1”。
(6)-9999,9999,9999;-9999,9999,9999;应输出“1,9999,9999,9998”。
(7)1,0000,9999,9999;1;应输出“1,0001,0000,0000”。
实现提示:
(1)每个结点中可以存放的最大整数为32767,才能保证两数相加不会溢出,但若这样存放,即相当于按32768进制存放,在十进制与32768进制数之间的转换十分不方便,故可以在每个结点中仅存十进制的4位,即不超过9999的非负整数,整个链表表示为万进制。
(2)可以利用头结点数据域的符号代表长整数的符号。用其绝对值表示元素结

点数目。相加过程中不要破坏两个操作数链表。两操作数的头指针存于指针数组中是简化程序结构的一种方法。不能给长整数位数规定上限。
程序要帮我写出来的呀, 还要有注解的哦.

(1) 定义长整数,例如:
typedef struct int72 {
int i[4];
} INT72;

INT72 a,b,c;

(2) 从键盘接收两个长整数 nddd,dddd,dddd; ndd,dddd;
先作为unsigned char 存放:
int len[2],neg[2]; // 长度,负号
unsigned char str[2][20], ch; // 存放负号数字逗号
printf("Input 2 data: a;b;\n");
len[0]=0; len[1] =0;
i = 0;
while ( ch = getchar() ){
if (ch == '\n') break;
if (ch <= 0x2b || ch >= 0x3c) goto Lab1;
if (i == 1 && ch == ';') break;
if (i == 0 && ch == ';') { i = 1; goto Lab1;};
str[i][len[i]] = ch;
len[i] = len[i]+1;
Lab1:;
}

(3) 用str里第一个字符判断是否为负数
(4) 数的总位数=len - 逗号个数,若负数,再减1。
(5) 总位数模4 (除4取余)即最高那段数的数字个数,
其它段中都是4个数字。
(6) 计算a.i[0],a.i[1],a.i[2],a.i[3] 和 b.i[]...
a.i[0] = str[0][len[0]-1] + str[0][len[0]-2] * 10 + str[0][len[0]-3] * 100 + str[0][len[0]-4] * 1000;
....(注意跳过逗号)
(7) 分段做加法,考虑进位。
负数求反码加1,用补码做加法。

我晕,数据结构啊,俺帮不了你了,要是C的话,会帮你想想的.