2011-12-01 49 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; 
    } 
相关问题