2011-12-01 79 views
1

上週,我從我的老師一個項目,要我開發一個程序,它發生在一個字符串(整數流要準確),並計算在數字的總和字符串中的每個數字即ie。計算的數字時間之和字符串的長度

如果輸入是31456

  • 第一循環不執行任何操作(沒有編號,以與和作爲0的結果左的3)3
  • 第二循環結束(與總和的結果作爲3)
  • 第三循環結束對1(具有3 + 1 = 4結果)
  • 第四循環結束於4(3 + 1 + 4 = 8的結果)
  • 第五環5端(帶的結果3+ 1 + 4 + 5 = 13)
  • 第六循環結束於6(具有3 + 1 + 4 + 5 + 6 = 19結果)

我並提交一個工作項目,但它是滿的麪條代碼(嵌套循環,如果字符串長度是其結束少於循環次數),這不是一個乾淨的方法。我對這種情況徒然懷疑並研究了很多。我還沒有找到任何方式做這沒有嵌套for循環在C(或者我放棄了太快?)

同樣,我不是問你們對我的問題的答案,但想知道是否有一種沒有嵌套循環的方法(如果輸入的長度>嵌套循環的數量,將會出現問題)。

+3

你應該張貼的麪條代碼讓別人知道你已經嘗試 – prusswan

+1

爲什麼嵌套循環?它看起來像你只需要一個 – ziu

+0

@ziu,嵌套循環將需要像 爲我; I sgupta

回答

3

這裏是我的建議:停止「循環」的思想,並開始在「步驟」的思想。如果輸入的字符串有n個字符,則您有n+1步驟。

現在,深思以下三個問題:

  1. 你知道解決的第一步(沒有數字)?
  2. 給出的解決步驟k,你怎麼能計算解決方案步驟k+1
  3. 你怎麼可以結合問題1和問題2只是一個單一的循環來解決整個問題?

由於這是家庭作業,我讓你把它從這裏開始。

+0

換句話說,考慮如何在步驟k + 1中重用步驟k的結果 – prusswan

0

如果我得到你的權利

double temp = 0; 
for(int i = 0; i < str.Length; i++) // str is your complete number 
{ 
    temp += Convert.ToDouble(str[i]); 
} 

希望它能幫助。

+0

這隻計算數字的總和(即,在我的例子中總數= 19),我需要每個數字的和的結果(即3,4,8,13,19按照我的例子計算) – sgupta

+0

將它保存爲數組並且可以使用。 – Sandy

+0

如果您需要在每個數字處存儲總和並且我正確理解了您,則將中間和存儲在另一個向量中,即: 'double result = new double [str.size()];對於(int i = 0; i

0

僞代碼:

array of sums 
sums[0] = 0;    // That first time that you want to get 0!! 
for i = 1 to length of str 
    sums[i] <- sums[i-1] + str[i] 
0
#include <stdio.h> 

int sum(const char ch){ 
    static int sum = 0; 
    int retValue = sum; 

    sum += ch -'0'; 

    return retValue; 
} 

int main(){ 
    char nums[] = "314156";/* "31456" ? */ 
    int size = sizeof(nums)/sizeof(char); 
    int i; 

    for(i=0 ; i< size ; ++i){ 
     printf("%d time loop sum is %d\n", i+1, sum(nums[i])); 
    } 

    return 0; 
} 

DEMO

1 time loop sum is 0 
2 time loop sum is 3 
3 time loop sum is 4 
4 time loop sum is 8 
5 time loop sum is 9 
6 time loop sum is 14 
7 time loop sum is 20 
0

有一個叫partial_sum() C++標準庫函數執行你在單次通過描述一系列款項輸入。

int sums[] = { 0, 3, 1, 4, 1, 5, 6 }; 

std::partial_sum(sums, sums + 7, sums); 

// The results are left in sums[0]..sums[6] 
-1
#include<iostream> 
#include<cctype> 
using namespace std; 
void main() 
{ 
const int SIZE=10; 
char myArray[SIZE]; 
int length=0,sum=0; 
cout<<"enter Array of digit from 1-9\n\n "; 
cin>>myArray; 
cout<<myArray<<endl; 
for(int i=0;i<myArray[i];i++) 
{ 
    if(!isspace(myArray[i])) 
    //if(myArray[i]!=NULL) 

    length++; 
} 
    cout<<length<<endl; 


for(int i=0;i<length;i++) 
{ 
    sum+=myArray[i]-'0'; 

} 



    cout<<sum; 
    } 
相關問題