加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

大数存储

发布时间:2020-12-14 03:01:52 所属栏目:大数据 来源:网络整理
导读:/** 挑战类型表示的极限 解决思路: 用一个数组存储一个大数,每个数组元素存储大数中的一位数字,然后采用逐位相乘,后位向前进位的方法计算大数的阶乘值 只要数组长度定义的足够大,就可以计算足够大的数的阶乘值。 */ #includestdio.h #includestdlib.h #d
/** 挑战类型表示的极限 解决思路: 用一个数组存储一个大数,每个数组元素存储大数中的一位数字,然后采用逐位相乘,后位向前进位的方法计算大数的阶乘值 只要数组长度定义的足够大,就可以计算足够大的数的阶乘值。 */ #include<stdio.h> #include<stdlib.h> #define SIZE 51 int main(){ int data[SIZE] = {0}; /* 存储50位数,元素全部初始化为0,不使用data[0] */ int index = 1; /* 数组元素个数,表示阶乘的位数 */ int n; /* 准备计算的阶乘中的最大值 */ int i,j,k; data[1] = 1; /* 初始化,令1的阶乘等于1 */ printf("Input n:"); scanf("%d",&n); for(i = 1; i <= n; i++){ /* 计算从1到n之间所有数的阶乘值 */ for(j = 1; j <= index; j++){ /* 计算阶乘i! */ data[j] = data[j] * i; /* 每一位数字都乘以i */ } for(k = 1; k < index; k++){ if(data[k] >= 10){ /* 若阶乘值的每位数字大于等于10,则进位 */ data[k+1] = data[k+1] + data[k] / 10; /* 当前位向前进位 */ data[k] = data[k] % 10; /* 进位之后的值 */ } } /* 单独处理最高位,若计算之后的最高位大于或等于10,则位数index加1,直到最高位没有进位为止 */ while(data[index] >= 10 && index <= (SIZE - 1)){ data[index+1] = data[index] / 10; /* 当前位向前进位 */ data[index] = data[index] % 10; /* 进位之后的值 */ index++; } if(index <= SIZE-1){ /* 检验数组是否溢出,若未溢出,则打印阶乘值 */ printf("%d! = ",i); for(j = index; j > 0; j--){ /* 从最高位开始打印每一位阶乘值 */ printf("%d",data[j]); } printf("n"); }else{ printf("Over flow!n"); /* 若大于50,数组溢出,则提示错误信息 */ exit(1); } } return 0; }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读