| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1443 人关注过本帖
标题:谁能编程做这个题,拜他为师!
只看楼主 加入收藏
Fjcyz
Rank: 2
等 级:论坛游民
威 望:1
帖 子:175
专家分:25
注 册:2006-2-6
收藏
得分:0 

题目不清不楚的

scanf 再 printf 不就行了


最好的域名、虚拟主机、VPS  www.
2006-03-06 11:27
虫的传人
Rank: 1
等 级:新手上路
帖 子:88
专家分:0
注 册:2006-3-5
收藏
得分:0 

数字太大的话,会溢出。。。。。。。。。。。。。
不然你自己编一个程序看看


好马不吃回头草 然而,我不是好马 可见,坏马也不吃回头草
2006-03-06 12:04
myajax95
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:30
帖 子:2978
专家分:0
注 册:2006-3-5
收藏
得分:0 

挺麻烦的,写了40分钟,俺的程序算到98的阶乘的时候crash,因为strlen已经不顶用了,必须把string拆成N结。
用C++写就不用考虑这问题了。把程序里所有的char[]换成string 或CString就应该多算不少了。

void Add (char charar1[], char charar2[])
{
int intCount, add1, add2, sum, intLongPos, intTmpPos;
char chararTmpLong[100000], *pcharShort;

if (strlen(charar2) > strlen(charar1))
strcpy(chararTmpLong, charar2), pcharShort = &charar1[0];
else
strcpy(chararTmpLong, charar1), pcharShort = &charar2[0];

for (intCount = strlen(pcharShort)-1; intCount >= 0; intCount--)
{
intLongPos = strlen(chararTmpLong) - 1 - (strlen(pcharShort)-1 - intCount);
add1 = chararTmpLong[intLongPos] - '0';
add2 = pcharShort[intCount] - '0';
sum = add1 + add2;
chararTmpLong[intLongPos] = '0' + sum % 10;
if (sum >= 10)
{
intTmpPos = intLongPos;
while (intTmpPos > 0)
{
chararTmpLong[--intTmpPos]++;
if ((chararTmpLong[intTmpPos] - '0') < 10)
break;
chararTmpLong[intTmpPos] = '0';
chararTmpLong[--intTmpPos]++;
}
}
}
if ((chararTmpLong[0] - '0') < 10)
strcpy(charar1, chararTmpLong);
else
{
sprintf(charar1, "1%s", chararTmpLong);
charar1[1] -= 10;
}


}

void Multiply(int intNumber, char result[])
{
char chararNew[100000] = "0", chararTmp[100000];
int intCount, intBit;

for (intCount = strlen(result)-1; intCount >= 0; intCount--)
{
sprintf(chararTmp, "%d", (result[intCount]-'0')* intNumber);
for (intBit = intCount; intBit < strlen(result)-1; intBit++)
strcat(chararTmp, "0");
if (intNumber == 98 && intCount == 88)
intBit++;
Add(chararNew, chararTmp);
}
strcpy(result, chararNew);
};

int main(int argc, char* argv[])
{
char charar[100000] = "1";
for (int intCount = 2; intCount <= 97; intCount++)
Multiply (intCount, charar);
return 0;
}


http://myajax95./
2006-03-06 16:09
feng1256
Rank: 4
等 级:贵宾
威 望:14
帖 子:2899
专家分:0
注 册:2005-11-24
收藏
得分:0 

叁蓙大山:工謪、稅務、嗣發 抱歉:不回答女人的问题
2006-03-06 16:13
sunnvya
Rank: 5Rank: 5
等 级:贵宾
威 望:17
帖 子:1094
专家分:0
注 册:2005-11-23
收藏
得分:0 

我看的那个算1000的阶乘那么大


http://www. 第二站>>>提供源码下载
2006-03-07 08:30
303770957
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:838
专家分:2125
注 册:2005-9-10
收藏
得分:0 

int getBitNum(int n)是一个求n!是几位数的函数。
比如:10的s次方=n!可得:s=[log1+log2+log3……+logn]注意:[]表示取整。
void calc(char*a,int n)这个函数是个重点,可惜要给你讲清楚很费事。
它是如何用数组去计算n!的函数,这中间有些语句是这个程序的核心部分!
呵呵!你自己体会吧。


♂ 死后定当长眠,生前何须久睡。♀
2006-03-16 23:50
┄┅☆伊ル利
Rank: 1
等 级:新手上路
帖 子:1554
专家分:0
注 册:2006-1-26
收藏
得分:0 
有工资拿没?

在我困难的时候,没有遗弃过我的人我都会记得.嘴耍的在好,在我这里没用.想跟我玩\"阴\"?那我玩死你.玩不死你也杀了你
2006-03-16 23:59
feng1256
Rank: 4
等 级:贵宾
威 望:14
帖 子:2899
专家分:0
注 册:2005-11-24
收藏
得分:0 
以下是引用啊邦在2006-3-16 23:59:00的发言:
有工资拿没?

禁止灌水~ 这里


叁蓙大山:工謪、稅務、嗣發 抱歉:不回答女人的问题
2006-03-17 00:02
haishanglang
Rank: 1
等 级:新手上路
帖 子:378
专家分:0
注 册:2006-3-2
收藏
得分:0 
不得了了

2006-03-17 20:11
dramalin
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2004-12-2
收藏
得分:0 

太大了,会产生溢出。实现阶乘的方法简单。
#include "stdio.h"
#include "conio.h"
main()
{

int i;

scanf("%d",&i);
if(i>=16)
printf("溢出\n");
else
{fact();


printf("%d!=%d\n",i,fact(i));}
getch();
}
/*递归求阶乘的子模块*/
int fact(j)
int j;
{
int sum;
if(j==0)
sum=1;
else
sum=j*fact(j-1);
return sum;
}

2006-03-17 21:51
快速回复:谁能编程做这个题,拜他为师!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.012676 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved