C++ 求整数序列的位数之和

C++ 求整数序列的位数之和,c++,vector,iterator,sum,digits,C++,Vector,Iterator,Sum,Digits,我下定决心写一小段代码,得到两个整数,比方说M和nm,你可以轻松地创建一个for循环来大大简化这段代码 没有必要经历所有这些努力 for (Initialization Action, Boolean Expression, Update_Action) 下面重新删除:对不起,我有点感冒,读N为M: 我认为一个主要的错误是M-1 sums.push_backdigital_SumN-digital_SumM-1 还需注意的是,已按照规范进行测试和工作,sans控制台输入: #include &

我下定决心写一小段代码,得到两个整数,比方说M和nm,你可以轻松地创建一个for循环来大大简化这段代码

没有必要经历所有这些努力

for (Initialization Action, Boolean Expression, Update_Action)
下面重新删除:对不起,我有点感冒,读N为M:

我认为一个主要的错误是M-1

sums.push_backdigital_SumN-digital_SumM-1


还需注意的是,已按照规范进行测试和工作,sans控制台输入:

#include <iostream>
#include <string>
using namespace std;

void sum_a_to_b(const int & a, const int & b)
{
    if (a <= b && a >= 0)
    {
        long long sum = 0;
        for (int i = a; i <= b; i++)
        {
            sum += i;
        }
        cout << "Sum of digits from " << a << " through " << b << " is " << sum << ".\n";
    }
}

int main()
{
    sum_a_to_b(5, 6);
    sum_a_to_b(1, 9);
}

你可以用一行循环来执行这个逻辑,为什么会增加这么多复杂性?你可以用一个简单的表达式来执行这个逻辑,只需计算它。提示:如果你想计算两次和,那么它可以被视为一个值序列加上相反序列的和。你不允许使用简单的公式,M*M+1/2?@RSahu Sahu我怎么能用这种形式来计算序列的位数。我的意思是,很明显,到目前为止,你对两个回答者中的任何一个都做了更多的思考,发现了他们甚至没有想到要寻找的模式。但是你需要和我们分享你的想法,以便我们排除故障。期望我们从代码中逆向工程设计是疯狂的,从头开始设计解决方案在这里也需要大量的工作。使用for循环可以转换哪些部分,并且既简单又快速。我看不出这里有什么错误。是的,我可以删除递归并生成循环,这就是你的意思吗?我看不出有任何错误,我只是说你可以使用for-loop来大大简化代码。除非你希望复杂性比ON-M lgn更好,否则需要更聪明的方法。@BenVoigt:是的。差分公式可能适用于更聪明的方法,但是数字总和的命名有点误导,它必须计算所有数字的数字总和,包括参数。不过代码并没有复杂得多。对不起,我有点感冒,把N误读为M:Fixing.Yes@cheerrandhth.-Alf这种方法会很好地工作,尽管它不适合1秒的时间限制。@cheerrandhth.-Alf,你能详细说明一下内部两个嵌套的forloop吗?这会计算数字的总和,不是它们的十进制表示数字之和。我们在寻找序列中所有数字的十进制数字之和。将更改顶部的示例。
#include <iostream>
#include <stdexcept>
using namespace std;

bool throwX() { throw std::runtime_error( "Ouch." ); }

auto main() -> int
{
    for( ;; )
    {
        int m, n;
        cin >> m >> n || throwX();
        if( m == 0 && n == 0 ) { break; }

        int sum = 0;
        for( int i = m; i <= n; ++i )
        {
            for( int v = i; v != 0; v /= 10 )
            {
                sum += v % 10;
            }
        }
        cout << sum << endl;
    }
}
#include <iostream>
#include <string>
using namespace std;

void sum_a_to_b(const int & a, const int & b)
{
    if (a <= b && a >= 0)
    {
        long long sum = 0;
        for (int i = a; i <= b; i++)
        {
            sum += i;
        }
        cout << "Sum of digits from " << a << " through " << b << " is " << sum << ".\n";
    }
}

int main()
{
    sum_a_to_b(5, 6);
    sum_a_to_b(1, 9);
}