请问 c语言编程 1!+4!+7!+10!+13!怎么做

如题所述

其实这个程序,用一个单重的循环就可以实现的:

#include <stdio.h>

int main()

{ long long i,t=1,s=1;

  for(i=4; i<14; i+=3)

  { t*=i*(i-1)*(i-2);

    s+=t;

  }

  printf("%lld\n",s);

  return 0;

}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2016-08-30
/* 因为13的阶乘,使用函数func()计算,超界,得到的数据是错误的,
 * 所以,需要使用大数阶乘函数。
 *  同理,楼上的代码,计算13的阶乘,也是错误的。
 */
#include <stdio.h>
#define LEN 20 
long func(int n);
void fun(int n);
int num[LEN] = {0};
void add(long n, int src[], int dest[]);

int main() 
{
long total = 0;
int array[20] = {0}; 
total = func(1) + func(4) + func(7) + func(10);
printf("1!+4!+7!+10!=%ld\n", total);
fun(13);  /* 超限,使用大数阶乘函数 */ 

add(total, num, array); /* 求最终值 */ 
return 0;
}

long func(int n)
{ /* 小于等于10的数阶乘计算 */
int i = 1;
unsigned long sum = 1;
for (i = 1; i <=n; i++)
{
sum *= i;

// printf("%d的阶乘为:%ld\n", n, sum);
return sum;
}

void fun(int n)
{ /* 大数阶乘计算 */
int tmp = 0;
if (n == 0 || n == 1)   
  { 
  num[1] = 1;
    }
    else
{
num[1] = 1;
for(int i = 2; i<=n; i++)
{
for(int j = 1; j<sizeof(num)/sizeof(int); j++)
{
num[j] *= i;
}
for(int k = 1; k<sizeof(num)/sizeof(int); k++)
{
if(num[k] > 10)
{
tmp = num[k];
num[k]   =  num[k] % 10;
num[k+1] += tmp /10;
}
}
}
}
printf("%d!=", n);
int flag = 0;
for(int i = LEN; i>0; i--)
{
if (num[i] == 0 && flag == 0)
{ /* 不打印数组中无效的零 */
continue;
}
else 
{
flag = 1;
printf("%d",num[i]);
}
}
printf("\n"); 
}

void add(long n, int src[], int dest[])
{ /* 将n和src[]逐位相加,存入dest[] */
int tmp[20] = {0};
int iNum = n;
int iIndex = 1;
while (1)
{
tmp[iIndex] = iNum % 10;
iNum /= 10; 
iIndex++;
if (iNum == 0 || iIndex > LEN)
break;


for (int i = 1; i <= iIndex; i++)
{
int iTmp = src[i] + tmp[i] + dest[i];
if (iTmp > 9)
{ /* 处理进位 */
dest[i] = iTmp % 10;
dest[i+1] += 1;
}
else
{
dest[i] = iTmp;
}
}
for (int i = iIndex+1; i < LEN; i++)
dest[i] += src[i]; 

printf("++++++++++++++++\n和为:");
int flag = 0;
for(int i = LEN-1; i>0; i--)
{
if (dest[i] == 0 && flag == 0)
continue;
else {
flag = 1;
printf("%d",dest[i]);
}
}
printf("\n");
}

第2个回答  2021-04-17

第3个回答  2016-08-30
#include <>
unsigned long fac(unsigned long n);
int main(void)
{
    unsigned long sum,i;
    for(i=1,sum=0;i<14;i+=3)
    {
        sum+=fac(i);
    }
    printf("%lu\n",sum);
    return 0;
}
unsigned long fac(unsigned long n)
{
    if(n)
        return n*fac(n-1);
    return 1;
}

本回答被网友采纳

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网