L1-008 求整数段和 (10分)
给定两个整数A和B,输出从A到B的所有整数以及这些数的和。
输入格式:
输入在一行中给出2个整数A和B,其中 ,其间以空格分隔。
输出格式:
首先顺序输出从A到B的所有整数,每5个数字占一行,每个数字占5个字符宽度,向右对齐。最后在一行中按Sum = X
的格式输出全部数字的和X
。
输入样例:
-3 8
输出样例:
-3 -2 -1 0 1
2 3 4 5 6
7 8
Sum = 30
答案1
格式错误,可我怎么找不出哪里错误呢???
这个解答是错误的
#include <iostream>
#include <stdio.h>
using namespace std;
int main()
{
int n, m;
scanf("%d %d", &n, &m);
if(n > m){ //这里是废话
int temp = n;
n = m;
m = temp;
}
int sum = 0;
int count = 0;
for(int i = 0; i <= (m - n); i++){
printf("%5d", n+i );
sum += (n + i);
count++;
if(!(count % 5)){
printf("\n");
}
else if((count % 5) && ((n + i) != m)){ //所以这个判断是错误的
printf(" ");
}
}
if(count % 5)
printf("\n");
printf("Sum = %d", sum);
return 0;
}
刚刚发现,不需要判断n, m 大小,题目给了大小关系
我换一下方式吧
aaaaa 原来%5d之后就不用加空格了!亏我还各种判断,还以为最只有最后一位才没有空格!
答案2
精简版,去掉了答案1的废话和错误的判断,用了cin和cout
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int main(){
int i, j, m, n;
cin >> m >> n;
int count = 0;
int sum = 0;
for(i = m; i <= n; i++){
count++;
sum += i;
printf("%5d", i);
if(count % 5 == 0 && i != n)
printf("\n");
}
cout << endl;
cout << "Sum = " << sum << endl;
return 0;
}