永发信息网

C++编程问题,一本书的页码从1到600连续编号,则数字0到9在页码中各出现多少次?

答案:2  悬赏:0  手机版
解决时间 2021-03-27 15:15
  • 提问者网友:贪了杯
  • 2021-03-27 01:32
C++编程问题,一本书的页码从1到600连续编号,则数字0到9在页码中各出现多少次?
最佳答案
  • 五星知识达人网友:大漠
  • 2021-03-27 02:01
#include 
#include 
void  statNum(int sn[10], int n)
{
    int i, c, k, s, pown;
    for(int i = 0; i < 10; i++)
        sn[i] = 0;
    for(k=s=0, pown=1; n > 0; k++, n /=10, pown *=10)
    {
        c = n%10;
        //先补0
        //统计从个位算起前k位 0 ~ 9 个数
        for(i=0; i < 10; i++)                 
            sn[i] += c*k*pown/10; 
       //  统计第k+1位出现 0 ~ (c-1) 个数              
        for(i=0; i < c; i++)                 
            sn[i] += pown; 
       //  统计第k+1位出现 c 个数              
        sn[c] += 1 + s; 
        
        //  去掉第k+1位补 0 个数              
        sn[0] -= pown;
        s += c*pown;
    }
}

void  main(int argc , char *argv[])
{
    int sn[10], i, n=2030;
    if(argc > 1)
        n = atoi(argv[1]);
    printf("n = %d
", n);    
    statNum(sn, n);
    for(i=0; i < 10; i++)
        printf("%d: %d
", i,sn[i]); 
}
全部回答
  • 1楼网友:思契十里
  • 2021-03-27 03:00

以下代码用C#编写,C++中应该能通用,关键是拆解数字,这类操作单片机数码管显示编程中非常常用(输出结果部分可能需要修改,也可删除)
private void Calc()
{
        //存放0~9的数目,正好0的位置放的0的数目,1的位置放的1的数目
    int[] sumNumbers = new int[10];
    for (int i = 600; i > 0; i--)
    {
        //拆解数字成百位,十位和个位
        int bai = 0, shi = 0, ge = 0;
        if (i >= 100)
        {
            bai = i / 100;
            sumNumbers[bai]++;
            shi = i % 100 / 10;
            sumNumbers[shi]++;
            ge = i % 10;
            sumNumbers[ge]++;
        }
        else if (i >= 10)
        {
            shi = i / 10;
            sumNumbers[shi]++;
            ge = i % 10;
            sumNumbers[ge]++;
        }
        else
            sumNumbers[i]++;
    }
    //输出结果部分 可删除
    string s = "";
    for (int i = 0; i < 10; i++)
    {
        s += (i.ToString() + " ==> " + sumNumbers[i].ToString() + Environment.NewLine);
    }
    MessageBox.Show(s);
}
祝编程快乐~
@所有人   如果觉得回答的不错,记得给点个赞哦,谢谢~
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯