求改改代码(可能没有改的必要)

完数是指一个整数恰好等于它的因子之和(除自身外),则称这个数为完数。从键盘先后输入两个不大于9999的正整数m和n,若m>n,则交换两数。然后求m~n(m和n均为正整数且m≤n)之间的所有完数。

【输入形式】

先后输入两个正整数m和n,用逗号分隔

【输出形式】

输出所有完数,每两个数之间用逗号分隔。若输入非法,则输出“error”

【样例输入】

1,2000

【样例输出】

6,28,496

【样例说明】

【评分标准】

正确性
请问循环结构有什么问题,编译通过,但输出全为error,大一刚学,作业题,感谢。

img

外侧循环,每次都需要把sum重新设置为0

代码不要截图,直接贴代码出来。

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/356530
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:从键盘输入m,n,计算从m到n之间的所有偶数和并输出所有偶数
  • 除此之外, 这篇博客: 输入两个正整数 n 和 m ,再输入 n 个整数,将这些数排成一行,向右循环移动 m 个位置(从右边移出的数再从左边移入),最后输出移动后的n个整数。 要求定义并调用函数 mo中的 输出样例: 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:
    After move: 3 4 5 1 2
    

    代码块

    #include <iostream>
    #include<string>
    #include"math.h"
    #include <complex>
    #include"iomanip"
    #include <vector>
    #include "stdlib.h"
    #include <stdio.h>
    //输入两个正整数 n 和 m(1 < m < n <= 10),再输入 n 个整数,将这些数排成一行,向右循环移动 m 个位置(从右边移出的数再从左边移入),最后输出移动后的n个整数。
    //
    //	要求定义并调用函数 mov(x, n, m) 实现上述循环移动的功能,函数形参x的类型是整型指针,形参n和m的类型是int,函数的类型是void。
    //
    //	输出格式:数据之间以空格分隔,最后一个数据集后面没有空格
    //
    //	输入输出示例:括号内为说明
    using namespace std;
    void move(int* x, int n, int m);
    
    void move(int* x, int n, int m)
    {
    	for (int i = 0; i < m; i++)
    	{
    		int temp =x[n - 1];
    		for (int j = n - 1; j > 0; j--)
    		{
    			x[j] = x[j - 1];
    		}
    		x[0] = temp;
    	}
    	cout << "After move: ";
    	for (int i = 0; i < n-1; i++)
    		cout << x[i]<<' ';
    	cout << x[n - 1] << endl;
    }
    
    int main()
    {
    	int n , m;
    	cin >> n >> m;
    	int *x;
    	x = new int[10];
    	for (int i = 0; i < n; i++)
    	{
    		cin >> x[i];
    		//cout << x[i];
    	}
    	move(x, n, m);
    	return 0;
    }
    
    

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^