用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
- 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类型的范围。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯