所以我试着做了一个小程序,它会得到一个输入n,代表你想放进去的数字,然后它会检查这个数字的除数之和是否等于它,然后在最后它会显示有多少个数字的除数之和等于它们,但是由于某种原因,它不起作用,它总是显示0
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
int n, k, l, i, j, m;
cin >> n;
m = 0;
l = 0;
for (i = 0; i < n; i++){
cin >> k;
m = 0;
for (j = 1; j <= n/2; j++) {
if (k%j == 0) {
m = m + j;
}
}
if (k == m){
l++;
}
}
cout << l;
return 0;
}
2条答案
按热度按时间h9vpoimq1#
使用更有意义的名称会立即暴露错误:
现在很明显,您在最内层循环中使用了错误的上边界。
2q5ifsrm2#
问题就在这里:
n
告诉您要检查多少个数字,但您实际检查的数字是k
,因此应该是我还删除了除以2的部分,假设您要对所有除数求和。