回 帖 发 新 帖 刷新版面

主题:不懂请高手解释,谢谢

#include<iostream>
using namespace std;
int main()
{
const int MAXSIZE=100;
int array[MAXSIZE];
int n;
cout<<"n=";
cin>>n;
int sum,sc;
int i,j;
for (i=0;i<MAXSIZE;i++)
array[i]=0;
array[0]=1;
for(i=2;i<=n;i++)
{
    sc=0;
    for(j=0;j<MAXSIZE;j++)
    {
    
    sum=array[j]*i+sc;
       sc=sum/10;
      
    array[j]=sum%10;[/color]    }
}
cout<<n<<"!=";
for(i=MAXSIZE-1;i>=0;i--)
cout<<array[i];
cout<<endl;
    return 0;
}

回复列表 (共4个回复)

沙发

麻烦下次让人解释代码的时候请务必先写上代码的意图,也就是原题。这个程序我是看到最下面的输出才明白要做什么
概括地说,这是一个高精度计算阶乘的程序,但代码还不够完善(计算效率略低,输出前面会有一堆没用的0,而且只对被乘数进行了拆分)
#include<iostream>
using namespace std;
int main()
{
const int MAXSIZE=100;//常量定义,最长100位
int array[MAXSIZE];//定义100长度的整形数组用于输入结果
int n;
cout<<"n=";
cin>>n;//你要计算多少的阶乘,这里缺入参检验
int sum,sc;//和,进位
int i,j;//循环变量,但是C++的话更推荐直接写在for语句里
for (i=0;i<MAXSIZE;i++)
array[i]=0;//初始化,全0,也有更简洁的初始化方法
array[0]=1;//初值,最低位赋1
for(i=2;i<=n;i++)//阶乘主循环
{
    sc=0;//进位标志清0
    for(j=0;j<MAXSIZE;j++)//单次高精度乘法
    {
    
    sum=array[j]*i+sc;//当前位乘法+进位
       sc=sum/10;//进位
      
    array[j]=sum%10;    }//当前位取余
}
cout<<n<<"!=";//输出提示信息
for(i=MAXSIZE-1;i>=0;i--)//输出结果
cout<<array[i];
cout<<endl;
    return 0;
}

总体来说,看得相当郁闷的程序

板凳

用一个100位的数组倒序来存储数据,循环完N次后,再从第100位开始输出.
一个求n!的函数.写的很好.

3 楼

有个问题不懂……
雪光风剑说的“int i,j;//循环变量,但是C++的话更推荐直接写在for语句里”这句意思是?
难得i,j不要申明?我试过,好像不行。刚刚学c++很多c的习惯还存在,见笑了,大家帮忙解释下,谢谢

4 楼

意思就是 这样写:for(int i=0;i<MAXSIZE;i++)
{
    ……
}

我来回复

您尚未登录,请登录后再回复。点此登录或注册