1、实验题目:长整型数运算,C中的long int所能表示的数据范围有限,现要求编程完成超过long int所能表示的数据范围以上的十进制正的长整数的加法和乘法运算。
2、实验提示:两个参与运算的长整数可用char a[256], b[256]表示,整个程序中要求完成以下几个函数的编写:
1) int readlongint(char * x); 此函数用于读入一个正的长整数到x中,函数返回长整数的实际长度;要求输入时检查所读入的字符串是否是合法的长整数,如不是提示用户直到输入合法的长整数为止;
2) char *addition(char *x,char *y); 此函数用于实现用字符串表示的长整数的加法运算,其计算结果保存在一个动态申请的字符数组空间(其长度为参与加法运算的两个长整数中较长的一个的长度加1)中,函数返回该数组的指针。
3) char *multiplacation(char * x,char *y);此函数用于实现用字符串表示的两个长整数的乘法运算,可考虑先将乘数的从个位到最高位的每一位与被乘数相乘(这一步可利用addition函数实现),再进行向左偏移后相加完成;
注意:此程序设计最关键的问题是对字符数组的下标定位和动态申请恰当的内存空间以保存计算结果,注意在乘法运算中回收不再使用的内存空间。
3、实现程序分为三个文件,function.h、function.c、main.c。具体实现如下所示:
function.h头文件声明操作函数
1#ifndef FUNCTUON_HEAD 2#define FUNCTION_HEAD 3 4//大数计算函数声明 5 6/* 此函数用于读入一个正的长整数到x中,函数返回长整数的实际长度*/ 7int readlongint(char * x); 8//读入一个有效的正整数x 9int readdata(char *x); 10//逆序字符串11void reverse_string(char *x); 1213/*此函数用于实现用字符串表示的长整数的加法运算*/14char *addition(char *x,char *y); 15//x累计n次16char* addition_n_times(char* x,int n); 17/*将正整数进行左移动n位*/18void left_move(char *x); 19/*此函数用于实现用字符串表示的两个长整数的乘法运算*/20char *multiplacation(char * x,char *y); 2122#endif
function.c是操作函数的实现,源代码如下所示:
1 #include"function.h" 2 #include3 #include