C语言,如何存一个很大的数,比方说10000的阶乘

我们使用最大的long double 来定义,可是还是撑不下这么大的数,那么该怎么做?

long double sum = 1;

int i = 1;

for (i; i

{

sum = sum * (double)i;

}

cout<

------解决思路----------------------

采用数组来表示

------解决思路----------------------

仅供参考:#include

#include

#include

using namespace std;

int COMPARE(string number1, string number2) {

int i,j;

int length1 = number1.size();

int length2 = number2.size();

if(number1.size() == 0) number1 = "0";

if(number2.size() == 0) number2 = "0";

j = 0;

for(i = 0; i

if(number1[i] == '0') ++j;

else break;

}

number1 = number1.substr(j);

j = 0;

for(i = 0; i

if(number2[i] == '0') ++j;

else break;

}

number2 = number2.substr(j);

length1 = number1.size();

length2 = number2.size();

if(length1 > length2) {

return 1;

} else if(length1 == length2) {

if(number1.compare(number2) > 0) {

return 1;

} else if(number1.compare(number2) == 0) {

return 0;

} else {

return -1;

}

} else {

return -1;

}

return 0;

}

string PLUS(string number1,string number2) {

int i;

int length1 = number1.size();

int length2 = number2.size();

string result="";

reverse(number1.begin(), number1.end());

reverse(number2.begin(), number2.end());

for(i = 0; i

char c = (char)(number1[i] + number2[i] - 48);

result = result + c;

}

while(i

result = result + number1[i];

++i;

}

while(i

result = result + number2[i];

++i;

}

int carry = 0;

for(i = 0; i

int value = result[i] - 48 + carry;

result[i] = (char)(value % 10 + 48);

carry = value / 10;

}

if(carry !=0 ) {

result = result + (char)(carry + 48);

}

for(i = result.size() - 1; i >= 0; i--) {

if(result[i] != '0') break;

}

result = result.substr(0, i + 1);

reverse(result.begin(), result.end());

if(result.length() == 0) result = "0";

return result;

}

string MINUS(string number1,string number2) {

int i;

string result = "";

int length1 = number1.size();

int length2 = number2.size();

if(COMPARE(number2,number1) > 0) {

return "-" + MINUS(number2, number1);

}

reverse(number1.begin(),number1.end());

reverse(number2.begin(),number2.end());

for(i = 0; i

char c = number1[i] - number2[i] + 48;

result = result + c;

}

if(i

for(; i

result = result + number1[i];

}

}

int carry = 0;

for(i = 0; i

int value = result[i] - 48 + carry;

if(value

value = value + 10;

carry = -1;

} else carry = 0;

result[i]=(char)(value + 48);

}

for(i = result.size() - 1; i >= 0; i--) {

if(result[i] != '0')break;

}

result = result.substr(0, i+1);

reverse(result.begin(), result.end());

if(result.length()==0) result = "0";

return result;

}

string MULTIPLY(string number1, string number2) {

int i, j;

int *iresult;

int length1 = number1.size();

int length2 = number2.size();

string result = "";

reverse(number1.begin(), number1.end());

reverse(number2.begin(), number2.end());

iresult = (int*)malloc(sizeof(int) * (length1 + length2 + 1));

memset(iresult, 0, sizeof(int) * (length1 + length2 + 1));

for(i = 0; i

for(j = 0; j

iresult[i+j] += ((number1[i] - 48) * (number2[j] - 48));

}

}

int carry = 0;

for(i = 0; i

int value = iresult[i] + carry;

iresult[i] = value % 10;

carry = value / 10;

}

for(i = length1 + length2 - 1; i >= 0; i--) {

if(iresult[i] != 0)break;

}

for(; i >= 0; i--) {

result = result + (char)(iresult[i]+48);

}

free(iresult);

if(result == "") result = "0";

return result;

}

string factorial(string n) {

string temp = "1";

string i;

for(i = "1"; COMPARE(i, n) <= 0; i = PLUS(i, "1")) {

temp = MULTIPLY(temp, i);

}

return temp;

}

int main(void) {

cout <

return 0;

}

------解决思路----------------------

弄个数组  然后针对这个数组写几个加减乘除的函数

------解决思路----------------------

四行代码算1000阶乘精确值

------解决思路----------------------

用数组,自己写计算函数

c语言中数组大小10000,C语言,怎么存一个很大的数,比方说10000的阶乘相关推荐

  1. 如何确定C语言中数组的大小?

    如何确定C语言中数组的大小? 也就是说,数组可以容纳多少个元素? #1楼 如果您要处理未作为参数接收的数组,则sizeof方法是正确的方法. 作为参数发送给函数的数组被视为指针,因此sizeof将返回 ...

  2. 从编译器角度分析C语言中数组名和指针的区别

    从编译器角度分析C语言中数组名和指针的区别 数组名和指针是两个往往很容易让人们混淆的概念,很多人以为数组名就是一个指针,也有很多人知道数组名不同于指针但是仅知道数组名的值不能像指针一样改变. 例如你可 ...

  3. C语言中数组的排序算法详解——选择法、冒泡法、交换法、插入法、折半法

    选择法排序 选择法排序是指:如果要把一个数组从小到大排列,那么就从该数组中依次选择最小的数字来排序.从第一个数字开始,将第一个数字与数组中剩下数字中最小的那一个交换位置,然后将第二个数字与剩下数字中最 ...

  4. c语言中数组的概念及作用,C语言数组的定义及其使用方法

    什么是数组? 在我们学习数组前先让我们介绍一下c语言中数组是什么?数组就是一个个元素按照一定顺序排列的集合.它将数据从最低的内存地址保存到最高的内存地址. 声明一个数组 c语言规定了声明数组的格式: ...

  5. C语言中数组名到底是什么?

    一般情况下,C语言中数组名在表达式中被解读为指向数组首元素的指针 C语言中数组名在表达式中被解读为指向数组首元素的指针, 即数组名在表达式中值为数组首元素的地址.(但有个例外,int a[2];int ...

  6. c语言中数组的变量j是什么,c语言中数组,一般数组

    c语言中数组,一般数组. 1.什么是数组,数组有什么用? 为了方便处理而把类型相同的变量有序地组织起来的一种形式. 类型相同的元素集中起来,在内存上排成一条直线. 2.数组的声明. 元素类型.变量名和 ...

  7. C语言中数组首地址和数组第一个元素的地址有什么区别

    C语言中数组首地址和数组第一个元素的地址关系如下: 1.它们的地址值是相等的. 2.第1个元素的地址如果是p,则p+1就是第2个元素的地址. 3.数组的首地址如果是p,则p+1就跳过这个数组而指向这个 ...

  8. c语言中的下标变量是什么,c语言中数组的下标从什么开始?

    c语言中数组的下标从0开始. 数组中的各元素的存储是有先后顺序的,它们在内存中按照这个先后顺序连续存放在一起.数组元素用整个数组的名字和它自己在数组中的顺序位置来表示. 例如:a[0]就表示名字为a的 ...

  9. c语言中数组的定义与应用

    定义方法: 类型  变量名[元素个数]: 比如: int  a[6]; char b[24]; double c[3]; 注意,c语言中数组的元素个数是不能动态定义的(修改:在c99中已经可以了) 也 ...

最新文章

  1. 记录一次壮烈牺牲的阿里巴巴面试
  2. jdk8 接口默认方法_JDK 8中方便的新地图默认方法
  3. cocos怎么把res文件夹放服务器上,cocos2d 三合一跑胡子房卡+服务器组件+后台控制+安装教程+棋牌完整源码...
  4. 滑动轨迹 曲线 python_python – 计算轨迹(路径)中的转折点/枢轴点
  5. Mvc Webapi+Fiddler调试 (WebAPI 一)
  6. java docker 持续集成_最佳实战Docker持续集成图文详解
  7. 高考数据分析和读书感悟
  8. Android实时打印kernel和App log(两种方法)
  9. 怎样用计算机求成绩平均分,2017年计算机一级WPS辅导:WPS2007中求特定比例成绩的平均分...
  10. 展讯DTS路径及编译
  11. 轻薄 linux 笔记本,华为MateBook13Linux版全面屏轻薄性能笔记本一键重装win10图文
  12. 温度计数值转换C语言,f和c温度换算(体温计f怎样转换c)
  13. 【盘点】2017杭州云栖大会迁云实战Workshop
  14. 平凡的人,做不平凡的事
  15. [编译原理随记]正则表达式转为NFA状态图(Thompsion构造法)
  16. 清凉一夏 5 月学习挑战,得限量勋章冲榜赢现金
  17. 苹果app老是显示无法连接服务器失败原因,iphone无法连接到app store服务器出错怎么办...
  18. NAT+路由?内网套娃模式到底有何弊端?
  19. 什么是overlay?如何定制overlay?
  20. datatables 小试牛刀

热门文章

  1. 计算机网络和传统电话网络的最大区别是,传统电话和网络电话有什么区别
  2. mysql udf编译_MySql UDF 调用外部程序和系统命令
  3. 华为鸿蒙加快完善,替换安卓!华为鸿蒙OS生态持续扩大:或适配高通平台
  4. classpath环境变量
  5. 均值定理最大值最小值公式_如何理解中值定理?三大微分中值定理的几何意义及其证明介绍。...
  6. python install pip 区别_python conda、pip区别,python 下 faiss 安装
  7. shell学习(12)- jq
  8. sublimelinter-php 错误代码提示
  9. 利用反射操作bean的属性和方法
  10. 怎么用js实现jq的removeClass方法