永发信息网

用while语句写100的阶层

答案:6  悬赏:60  手机版
解决时间 2021-08-21 08:23
  • 提问者网友:萌卜娃娃
  • 2021-08-20 18:30

100!用while语句编程

#include<stdio.h>

main()

{int s,i;

s=1;

i=1;

while(i<=100)

{s*=i;

i++;}

printf("%d",s);

}

这样的,12以后的求阶层都是错的,100根本求不出,不知道哪错了……高手帮下忙吧

最佳答案
  • 五星知识达人网友:千杯敬自由
  • 2021-08-20 19:36
#include<stdio.h>
#include<conio.h>
main()
{int i;
double s;
s=1;
i=1;
while(i<=100)
{s*=i;
i++;}
printf("%f",s);
getch();
}

printf里的输出格式化也要改,不过得到的仍然是一个粗略的数字,我以前正好写过一个大数阶乘的代码,给你贴一下:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define N 20480

long* a[N];

int main()
{
int i, j, t, n;
int c;

memset(a, 0, sizeof(a));
a[0] = (long*)malloc(sizeof(long));
*a[0] = 1;
scanf("%d", &n);
t = 0;
for(i = 2; i <= n; ++i) {
c = 0;
for(j = 0; a[j] != 0; ++j) {
c += *a[j] * i;
*a[j] = c % 10000;
c /= 10000;
if(a[j+1] == 0 && c != 0) {
a[t=j+1] = (long*)malloc(sizeof(long));
*a[t] = c;
c = 0;
break;
}
}
}
printf("%d!=\n%d", n, *a[t]);
free(a[t--]);
for(i = t; i >= 0; --i) {
printf("%04d", *a[i]);
free(a[i]);
}
return 0;
}
全部回答
  • 1楼网友:你可爱的野爹
  • 2021-08-21 01:33

这里的long double也不够大,s绝对定义不了

最后的答案用两个数定义吧,就是a*10的b次方的形式

,a,b分别用long int定义就绝对够了

就是s=a*pow(10,b)

然后s一大于10就除以10,b加1

这样应该可以了

  • 2楼网友:你可爱的野爹
  • 2021-08-21 00:03

那就改成long double s ;试试行不?

  • 3楼网友:迷人又混蛋
  • 2021-08-20 23:16

整形改成长整形就行了

  • 4楼网友:纵马山川剑自提
  • 2021-08-20 22:08

应为你定义的s是整型的 在32位操作系统中 int最大是(2的32次方)-1

100的阶乘肯定超了

把s改成double s;

试试看,也许会行

  • 5楼网友:封刀令
  • 2021-08-20 20:31
你定义的变量时int类型,所以100!的结果已经超出了int类型的范围。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯