急!!!C语言阶乘问题 求一到一百的阶乘和 用While或While do循环语句或for 语句

急!!!C语言阶乘问题 求一到一百的阶乘和 用While或While do循环语句或for 语句,第1张

#include<cstdio>

#include<cstring>

#include<iostream>

#include<algorithm>

using namespace std;

const int MAXN=510;

char re[MAXN];

struct Big{

int s[MAXN],len;

Big():len(1){memset(s,0,sizeof(s));}

void read()

{

scanf("%s",re);

int n=strlen(re);

len=(n-1)/4+1;int x=len,k=0;

while('0'<=re[k]&&re[k]<='9')

{

if(k&&k%4==n%4)x--;

s[x]=s[x]10+re[k]-'0';

++k;

}

}

void print()

{

for(int i=len;i>=1;--i)

{

if(i!=len)printf("%04d",s[i]);

else printf("%d",s[i]);

}

}

Big& operator +=(Big &a)

{

int n=max(alen,len);

for(int i=1;i<=n;++i)

s[i]+=as[i],s[i+1]+=s[i]/10000,s[i]%=10000;

while(s[len+1])len++;

return this;

}

Big& operator =(Big &a)

{

for(int i=len;i;--i)

{

for(int j=alen;j-1;--j)

s[i+j-1]+=s[i]as[j];

s[i]=s[i]as[1];

int k=i;

while(s[k])

s[k+1]+=s[k]/10000,s[k]%=10000,++k;

}

while(s[len+1])len++;

return this;

}

};

bool operator <(Big &a,Big &b)

{

if(alen!=blen)return alen<blen;

for(int i=alen;i>=1;--i)

if(as[i]!=bs[i])return as[i]<bs[i];

return false;

}

Big operator  (Big &a,Big &b)

{

Big c=a;

return c=b;

}

Big operator + (Big &a,Big &b)

{

Big c=a;

return c+=b;

}

int main()

{

Big sum,x,i,dz,lim;

dzs[1]=is[1]=xs[1]=1;

lims[1]=101;

for(;i<lim;i+=dz)

sum+=x=i;//从右往左运算,相当于x=xi;sum=sum+x;

sumprint();

}

楼上用int的,自然溢出运行出来应该会是负数或者0题主以后如果出阶乘题数据要小

运行结果:

因为阶乘50太大了,变量存不下,所以最后显示0,如果你将阶乘数改小一点就没问题了,比如10

或者将int型改成long long型,然后结果已%lld输出,但40、50的阶乘也无法容纳,因为结果太大了,20、30还可以

使用 double 型最多精确计算 22 的阶乘,算不了 100 的阶乘,所以不需要用 double 型,直接用 long 型就可以了,long 型最多只能算 20 的阶乘。

#include<stdioh>

int main() {

  long result = 1;

  int n = 1;

  int i = 1;

  while (1) {

    printf("请输入求阶乘中的n(1~20), 输入负整数退出本程序:");

    scanf("%d", & n);

    if (n < 0) {

      break;

    } else if (n == 0) {

      continue;

    } else if (n >= 1 && n <= 20) {

      result = 1;

      for (i = 1; i <= n; i++) {

        result = i;

      }

      printf("%d的阶乘是%ld\n", n, result);

    }

  }

}

declare @sum bigint

declare @i int

set @sum = 1

set @i = 2

while(@i <= 20)

begin

set @sum = @i @sum

set @i = @i + 1

end

print @sum

一个建议,想要学得真本事,问题就得自己尝试解决,除非你只是想敷衍自己

以上就是关于急!!!C语言阶乘问题 求一到一百的阶乘和 用While或While do循环语句或for 语句全部的内容,包括:急!!!C语言阶乘问题 求一到一百的阶乘和 用While或While do循环语句或for 语句、C语言求50的阶乘,用while来写,大神来看看为什么不对啊,结果是0。、c语言如何连续求无数个阶乘,用while循环结构等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9366177.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存