本文目录一览:
- 1、C语言中关于累乘的例子
- 2、C语言中累加累乘的算法是什么
- 3、c语言求阶乘累加和
- 4、C语言简单问题!!!1-99累乘(用的while语句)
- 5、用C语言求1至100之间偶数积
- 6、c语音代码1*100(累成)
C语言中关于累乘的例子
/*************************
输入n,输出1*2*3...*n的值
*************************/
#includestdio.h
int main()
{
int n;
while(scanf("%d",n)!=EOF)
{
int i;
int res=1;
for(i=1;i=n;i++)
{
res = res*i;
}
printf("%d\n",res);
}
return 0;
}
C语言中累加累乘的算法是什么
累加累乘,呵呵,很简单的。
首先,就是定义一个变量(a=0)来保存结果,另定义一个变量(b)实现数值的变化。把数值变化的那个变量(b)的值每次和保存结果的变量(a)进行运算,结果赋给a.比如1——10的累加,就是先把1赋给a,之后b变成2,和a相加结果给a。如此反复就是累+。乘法一样
c语言求阶乘累加和
题目中数据很大
于是我们有了高精度算法
思路是什么呢:
一个数组里面每一位存的是十进制数三位(也可以只存一位,但是比较慢)
也可以理解成一千进制
这样能模拟大整数的乘法、加法
#includestdio.h
#includestring.h
#define max(a,b) (ab?a:b)
int n;
FILE * input, * output;
struct bigint
{
int len;
int num[1100];
}fac,sum;
void mul(int value){//高精度乘单精度
int i;
for (i=1;i=fac.len;i++)
fac.num[i]=fac.num[i]*value;//每个数位乘上数
for (i=1;i=fac.len;i++)
if (fac.num[i]=1000) {//逢千进一
fac.num[i+1]+=fac.num[i]/1000;fac.num[i]%=1000;
}
if (fac.num[fac.len+1]) fac.len++;//位数可能会增加,而且最多增加1
}
void add()//给sum加上fac的值
{
int i;
//由于此时fac永远大于sum所以不用判断sum的长度
for (i=1;i=fac.len;i++)
sum.num[i]+=fac.num[i];//每一位加上fac的值
for (i=1;i=fac.len;i++)
if (sum.num[i]=1000){//逢千进一
sum.num[i+1]++;sum.num[i]-=1000;//因为加法运算不可能往前进2
}
sum.len =fac.len;
if (sum.num[sum.len+1]) sum.len++;
}
void out()//输出
{
int i;
for (i=sum.len;i=1;i--)
{
if (isum.len) //压位高精度一定要判断位数
{//因为如果不是第一位,其他要补0,因为如果这个数是1001,就会变成11
if (sum.num[i]10) fprintf(output,"00");
else if (sum.num[i]100) fprintf(output,"0");
}
fprintf(output,"%d",sum.num[i]);
}
fputc('\n',output);
}
int main(){
input = fopen("factor.in","r");
output = fopen("factor.out","w");
memset(fac.num,0,sizeof fac.num);
memset(sum.num,0,sizeof sum.num);
fscanf(input,"%d",n);
int i;
fac.len = sum.len = 1;//初始赋成1
fac.num[1] = sum.num[1] = 1;
for (i=2;i=n;i++)
{
mul(i);
add();
}
out();
fclose(input);fclose(output);
return 0;
}
C语言简单问题!!!1-99累乘(用的while语句)
#include stdlib.h
void main() { int i; double sum;
i=1; sum=1;
while(i=99){ sum*=i; i++; }
printf("sum=%.0lf\n",sum);
}
由于超过有效位数表示能力,肯定不精确
用C语言求1至100之间偶数积
这个不好做啊,乘积太大了,要精确结果还是近似的,近似的话浮点数可以解决。
#includestdio.h
main()
{
int
i;
double
sum=1;
for(i=2;i=100;i+=2)
sum
*=
i;
printf("Sum
is
%e\n",
sum);
//注意这里使用%e作为输出。
}
整点int是肯定不行的,会溢出。
还有一个办法就是计算2^50和50!的乘积
c语音代码1*100(累成)
这一死循环啊。。。while (2101) 会永远执行下去的!
改成 while (i101) 通过变量i控制循环执行99次。
另外,1累乘到100,其结果int型完全存储不下。。。。你确定题目要求这么搞??
#include stdio.h
int main(void) {
int i=2;
int num=1;
while (i11) { /*累乘到100,int存储不下,这里先改为累乘至10*/
num*=i;
printf ("%d\n",num);
i++;
}
getch (); /*屏幕暂留*/
return 0;
}
运行结果