2011-03-22 74 views
-1

你创建显示之间并包括由用户输入的两个数字甚至整数的和一个节目..C++编程的帮助

EX)2和7 =的总和12(2 + 4 + 6)

这就是我到目前为止!屁股如果u可以只把我在正确的方向,将是有益的

//Advanced30.cpp - displays the sum of the even integers between and 
//including two numbers entered by the user 
//Created/revised by <your name> on <current date> 

#include <iostream> 
using namespace std; 

int main() 
{ 
    // declare variables 
    int num1 = 0; 
    int num2 = 0; 
    int sum= 0; 

    cout << "Enter the First Number:" << endl; 
    cin >> num1; 
    cout << "Enter the Second Number:" << endl; 
    cin >> num2; 

    if (num1 > num2) 
    { 
    cout << "Invalid entry. Final number must be less than the first number. Please try again." << endl; 
    } 
    for (int sum = (((num1 + 1)/2)*2); num1 <= (((num2 + 1)/2)*2) ; sum = 2 + (((num1 + 1)/2)*2)) 





    return 0; 
} //end of main function 
+1

这是功课? – Keith 2011-03-22 03:44:17

+0

哈哈!两个人一样的功课:http://stackoverflow.com/questions/5386904/c-programming-help – 2011-03-22 04:48:33

+0

KAtie你需要按时完成你的功课:http://stackoverflow.com/questions/5385447/c-programming- help-please – 2011-03-22 05:00:00

回答

2

在你的循环应该是这样的。

double sum = 0.0; 
for(i = num1; i <= num2; i++){ 
if(i % 2 == 0){ // Is our number even 
    sum += i; 
    } 
} 

就是这样,它打印出总和。

+0

为什么用'double'来总结'int's? – Benoit 2011-03-22 04:07:33

+0

@Benoit,以防万一溢出整数,但现在我认为它可能用了很长时间。 – ranzy 2011-03-22 23:12:37

1

我将简化您的for循环

for(int i = num1; i <= num2; i++) { 
    if(i % 2 == 0) sum += i; 
} 

这将着眼于两倍多的数字,但说实话,这不是所有的昂贵得多。

你也可以做到在O(1)时间采取的事实和1..1 == N *(N + 1)

这里是Java中的一个很简单的例子优势,翻译它以C++不会太困难,我希望:) 没有C++编译器,这台机器上:-X

import java.util.*; 
class DoubleSum { 
    public static void main(String[] args) { 
     Scanner sc = new Scanner(System.in); 
     int num1 = sc.nextInt(); 
     int num2 = sc.nextInt(); 

     int low = (num1 - 1)/ 2; 
     int high = num2/2; 

     int sumLow = (low*(low + 1)); 
     int sumHigh = (high*(high + 1)); 

     int sum = sumHigh - sumLow; 

     System.out.println(sum); 
    } 
} 
0
for(int i = num1; i <= num2; i++) 
{ 
    if(!(i & 1)) 
    sum += i; 
} 
0

你的代码将在一个无限循环结束。

看看for()循环。您有条件

num1 <= (((num2 + 1)/2)*2) 

确定您的循环是否终止。但是,由于num1本身不会增加,并且保证num1 < num2,所以此条件将始终为真 - 这意味着for循环永远不会结束。我也建议使用一个单独的循环变量。

1

您正在使用相同的变量来控制for循环和总和,这是行不通的。试试这个:

int even1 = num1 % 2 == 0 ? num1 : num1+1; 
int even2 = num2 % 2 == 0 ? num2 : num2-1; 
for (int i = even1; i <= even2; i += 2) sum += i; 

注意,你并不真的需要一个for循环:

int even1 = num1 % 2 == 0 ? num1 : num1+1; 
int even2 = num2 % 2 == 0 ? num2 : num2-1; 

// how many numbers you will sum (remember they are even, so we need to divide by 2) 
int count = 1 + (even2 - even1)/2; 

sum = (even1 + even2) * (count/2); 
if (count % 2 == 1) sum += (even1 + even2)/2;