C++简单程序帮忙指导一下,我菜鸟

来源:百度知道 编辑:UC知道 时间:2024/06/04 19:21:50
#include<iostream.h>
void main(void)
{
cout<<"输入正整数n:";
float y=0;
int i=1,j=1,k,n;
cin>>n;
while(i<=n){
j=1;k=1;
while(j<=i)
{k=k*j;j++;}
y+=k;
i++;}
cout<<y<<endl;
}
是求1!+2!+3!+````n!之和,我把他改成
#include<iostream.h>
void main(void)
{
cout<<"输入正整数n:";
float y=0;
int i=1,j=1,k=1,n;
cin>>n;
while(i<=n){
while(j<=i)
{k=k*j;j++;}
y+=k;
i++;}
cout<<y<<endl;
}
初始值的位置变了一下,怎么也能得带正确结果呢?有点晕

首先有个规律n!=(n-1)!*n
程序1中,你吧j=1,k=1放在循环中,每次内层循环都会将当前j值从1乘到j,这样可以达到目标但运算量大
程序2中,j,k不再置1,上次内层循环在计算出k值后,下次计算就将k带入运算相当于(k+1)!=k!*(k+1),这样每次内层循环只循环1次,因此俩程序目标一样,但运算量差别大

k和j都在以前的基础上运算的
比如说求3的阶乘的时间,上一次执行完以下语句后k等于2的阶乘,j等于3
while(j<=i)
{k=k*j;j++;} 在执行这句话时间k等于2的阶乘乘以3,此时k就等于3的阶乘了,如此继续往后运算