2011-03-22 65 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;