【问题标题】:Counting digits of a number in a certain interval在一定间隔内计算数字的位数
【发布时间】:2020-02-24 13:27:11
【问题描述】:

我必须制作一个 c++ 程序来计算区间 [m=1000;n=1100] 内的数字是否为偶数位数。

但是使用我编写的这个程序,我得到了一个无限循环。

int digits(int m, int n)
{
    int i, count_digits = 0;

    for(i = m; i < n; i++)
    {
        while(i != 0)
        {
            i = i/10;
            count_digits++;
        }
    }
    if(k%2 == 0) return count_digits;
}

【问题讨论】:

  • 这里的k是什么?并正确缩进代码。
  • 您能否举例说明给定输入mn 的预期返回结果?还要澄清k 是什么
  • 如果我理解当前您正在尝试查看 m-n 范围内的数字长度是否为偶数的问题?如果是这样,为什么不将它们转换为字符串并检查长度?

标签: c++ loops for-loop while-loop infinite-loop


【解决方案1】:

循环内

for(i = m; i < n; i++)
{
    while(i != 0)
    {
        i = i/10;
        count_digits++;
    }
}

您正在更改变量 i。

再引入一个局部变量

for(i = m; i < n; i++)
{
    int value = i;
    while(value != 0)
    {
        value /= 10;
        count_digits++;
    }
}

看来您还需要在循环的每次迭代中重新初始化变量count_digits

for(i = m; i < n; i++)
{
    int value = i;
    count_digits = 0;
    while(value != 0)
    {
        value /= 10;
        count_digits++;
    }
}

请注意,您的循环是在值 [m, n-1] 的范围内执行的,而不是您在问题中所写的范围 [m, n]。

也不清楚该语句中使用的变量 k 的位置

if(k%2 == 0) return count_digits;

已声明。

我猜你需要类似下面的东西

#include <iostream>

int main() 
{
    const int M = 1000;
    const int N = 1100;
    const int Base = 10;

    for ( int i = M; i <= N; i++ )
    {
        int value = i;
        size_t count_digits = 0;

        do 
        { 
            if ( value % Base != 0 ) ++count_digits; 

        } while ( value /= Base );

        if ( count_digits % 2 == 0 ) std::cout << i << ' ';
    }

    std::cout << '\n';

    return 0;
}

程序输出是

1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1020 1030 1040 1050 1060 1070 1080 1090 1100

在任何情况下,您都可以将该程序视为您的程序的基础。

【讨论】:

  • 为什么要在循环的每次迭代中重新初始化变量count_digits?
  • @nivpeled 我认为程序需要输出所有偶数位数不等于0的数字。否则我看不到赋值的意义。
猜你喜欢
  • 1970-01-01
  • 2019-08-01
  • 2012-03-26
  • 1970-01-01
  • 2016-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多