大数,高精度计算---百位大数

这篇博客介绍了如何处理超过最大数据类型限制的大数,通过使用字符数组模拟字符串存储大数,并实现两个100位大数的加、减、乘法运算。提供了函数原型及实验要求,建议使用笔算过程、atoi和itoa函数进行操作,并给出了测试验证的方法。
摘要由CSDN通过智能技术生成
               

大数是算法语言中的数据类型无法表示的数,其位数超过最大数据类型所能表示的范围,所以,在处理大数问题时首先要考虑的是怎样存储大数,然后是在这种存储方式下其处理的实现方法。

一般情况下大数的存储是采用字符数组来存储,即将大数当作一个字符串来存储,而对其处理是按其处理规则在数组中模拟实现。

七 百位大数。

百位大数...让人又爱又恨阿。  回想去年,初学c语言,实验就有这个。
那时候折腾老久了。            刻苦铭心呀。
写这篇博客,没其他意思,主要是为了回忆回忆,然后记录一下当初的代码,便于以后翻看。

代码是大一上学期写的。可能比较水,大神们勿喷,纯属自己娱乐罢了。
 
实验题目:

此次实验要求利用数组实现两个百位大数(共有100位数字)的加、减、乘法的运算。
实现下列三个函数的功能(以下函数应在fun.h中声明,在fun.c中实现)
  函数原型:

/*实现两个大数的相加*/
   char* add(char* data, char* addend, char* result);

/*实现两个大数的相减*/
   char* minus(char* data, char* sub, char* result);

/*实现两个大数的相乘*/
   char* multiply(char* data, char* mult, char* result);

 

实验内容:

在给出的程序框架中完成实验题目。
mylib.c包括此次实验的程序框架。
 (在给出的程序框架中补充设计并完成实验。)

注:检验计算结果是否正确可利用提供的 test.exe 文件。
在mylib.exe和test.exe文件中输入相同的种子则会产生相同的随机大数。可以用test.exe产生的结果和mylib.exe对照结果检验对错。

请注意其中test.exe文件的输出格式和框架规定的输出格式有所不同。

 

提示:

字符型与整型转换

1.可以模拟笔算加减乘的过程,用数组储存大数;
2.可以用atoi和itoa函数;
3.对于一位整数的整型转换为字符型:

例:
char c;
int i = 9;
c = i+’0’;
printf(“%c”, c);

 



main.c

/* 姓名:****   班级:软件三班   学号:****   功能:百位大数   时间:2012.12.2  */#include <stdio.h>#include <stdlib.h>#include <string.h>#include "fun.h"#define N 100/* 产生随机的大数  */void create(char* num, unsigned seed)/*seed 为随机种子*/char result[2 * N] = {
    '\0'};int main(void){    char num[N];//多出符号位    char n[N];    //设定随机种子    unsigned int seed;    printf("Please input a  rand seed:");    scanf("%u", &seed);    printf("\nThe seed is %u\n", seed);  //产生随机大数    create(num, seed);    create(n, seed+1);    printf("***********************************************\n");    printf("num: %s\n n : %s\n", num, n);    //调用加法    add(num, n, result);    printf("num + n = %s\n", result);    //调用减法    minus(num, n, result);    printf("num - n = %s\n", result);    //调用乘法    multiply(num, n, result);    printf("num * n = %s\n", result);    system("pause");    return 0;}void create(char num[], unsigned seed){    int i = 0, x = 0;    int times, flag = 1;    srand(seed);    times = rand() % (N - 2) + 1;//避免溢出    if(rand() % 2)//随机生成负数{        num[i] = 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值