当前位置: 代码迷 >> C语言 >> 谁能编程做这个题,拜他为师!
  详细解决方案

谁能编程做这个题,拜他为师!

热度:106   发布时间:2006-03-06 11:27:00.0

题目不清不楚的

scanf 再 printf 不就行了


----------------解决方案--------------------------------------------------------

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


----------------解决方案--------------------------------------------------------

挺麻烦的,写了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://www.bc-cn.net/bbs/dispbbs.asp?boardID=5&ID=3211
----------------解决方案--------------------------------------------------------

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


----------------解决方案--------------------------------------------------------

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


----------------解决方案--------------------------------------------------------
有工资拿没?
----------------解决方案--------------------------------------------------------
以下是引用啊邦在2006-3-16 23:59:00的发言:
有工资拿没?

禁止灌水~ 这里


----------------解决方案--------------------------------------------------------
不得了了
----------------解决方案--------------------------------------------------------

太大了,会产生溢出。实现阶乘的方法简单。
#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;
}


----------------解决方案--------------------------------------------------------