a b的小数点后1000位之和 c语言,求1000!帮帮我啊求1000!用C语言作; 爱问知识人...

int result[] = new int[65500];

int tempres[] = new int[655500];

int i,j,k,m,n,o,q,temp,bit,tempbit;

double s = 1;

tempbit = 0;

for(int l = 2; l 0 || j >= 10) {

j = j / 10;

o = m;

q = 0;

while(q = 10){

temp = temp / 10;

temp = temp + tempres[n];

tempres[n] = temp % 10;

if(n >= tempbit){

tempbit++;

}

n++;

}

if(n >= tempbit){

tempbit = n;

}

q++;

}

m++;

}

bit = tempbit;

for(int p = bit - 1; p >= 0; p--){

int(tempres[p]);

result[p] = tempres[p];

tempres[p] = 0;

}

intln();

}

for(int p = bit - 1; p >= 0; p--){

int(result[p]);

}

因为我手上没有C方面的环境,所以我用java来写的

你只要把 intln();这个输出语句,换成C的就可以

还是说一下程序吧

因为1000!的结果非常大,所以不可能通过普通的方式来存储

也因此只有选用int数组来存储(如果int数组还不行就换long吧)数组的每一个数用来存储每一位数字,这样就可以存储6万多位,应该够大了吧!

然后是算法的问题,有两种方式

一:用加法迭代 即把每一次的乘法转换成加法 比如:10*11 转换成11个10相加(你可以自己试着用这种方法写一下)

二:用乘法 即用被乘数的每一位去乘以乘数 比如:10*11 转换成 1*10 1*10,但是后面这个1*11的结果要前移一位,使它能转换成100

第一种方法实现较为简单,但运行速度可能要慢点

第二种方法实现较为复杂,但运行速度要快点

以下是101!的结果

9。

425947759838354E159(这是double方式的结果,看样如果是10000!double都无能为力)

942594775983835942085。。。

(太长了,但可以看到和double运行的结果的前面几位是相同的,所以也应该是正确的)

我花了大概五个小时才搞定(人老人,脑子也不行了)我没有写注释,希望你一个小时内能看懂(锻炼一下你自己)

另外,我那么辛苦应该再加点分吧(强烈要求^_^)

祝你好运。

全部

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值