解读一下这段C语言代码

来源:百度知道 编辑:UC知道 时间:2024/05/22 10:19:13
int ndata,sum;
int data[100];
void solve(int s, int sign, int n);
void main(){
int i, number;
scanf(“%d%d”,&number ,&ndata);
sum = 0;
for(i = 0; i< ndata; i++)
scanf(“%d”,&data[i]);
solve(1, 1, 1);
printf(“%d”,sum);
}

void solve(int s, int sign, int n){
int i;
for(i=s; i<=ndata; i++){
sum += sign * (number /(n * data[i-1]));
solve(i + 1, -sign, n * data[i-1]);
}
}
主要是不理解solve(i + 1, -sign, n * data[i-1]);

int ndata,sum; //声明两个整形变量
int data[100]; //整型数组
void solve(int s, int sign, int n); //函数向前声明
void main(){
int i, number;
scanf(“%d%d”,&number ,&ndata); //输入两个整数
sum = 0;
for(i = 0; i< ndata; i++) //这里ndata代表的是输入次数
scanf(“%d”,&data[i]); //输入到数组,个数是ndata个
solve(1, 1, 1); //调用函数哦
printf(“%d”,sum); //输出sum
}
void solve(int s, int sign, int n){ //solve 解答
int i;
for(i=s; i<=ndata; i++){
sum += sign * (number /(n * data[i-1])); //貌似这儿有错。number是哪儿来的?
solve(i + 1, -sign, n * data[i-1]); //递归循环
}
}