标题:此代码是书的页码求解。但是我看不懂原理
只看楼主
kireirain
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2018-9-30
结帖率:0
 问题点数:0 回复次数:1 
此代码是书的页码求解。但是我看不懂原理
输入n是书的页数,然后返回从1到n中1的出现次数
#include <iostream>
#include <cstdio>
 
using namespace std;
 
int main()
{
    int n;
    scanf("%d", &n);
    int sum = 0;
    int k;
    for(int i = 1; k = n / i;i *= 10)
    {
        sum += k/10 * i;
        int tem = k % 10;
        if(tem > 1)
            sum += i;
        if(tem == 1)
            sum += n - k*i + 1;
    }
    printf("%d\n", sum);
    return 0;
}
搜索更多相关主题的帖子: 代码 页码 原理 int sum 
2018-10-19 19:03
林月儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:湖南
等 级:版主
威 望:138
帖 子:2276
专家分:10647
注 册:2015-3-19
得分:0 
应该是轮询每个位上出现1的次数再加和吧
程序代码:
#include <iostream>
#include <cstdio>

 
using namespace std;

 
int main()
{
    int n;
    scanf("%d", &n);
    int sum = 0;
    int k;
    for(int i = 1; k = n / i;i *= 10)
    {
        cout<<k<<":"<<i<<":"<<sum<<endl;
        int sum2=sum;
        sum += k/10 * i;
        int tem = k % 10;
        if(tem > 1)
            sum += i;
        if(tem == 1)
            sum += n - k*i + 1;
        
        cout<<"after:"<<i<<":sum+"<<sum-sum2<<endl;
    }
    printf("%d\n", sum);
    return 0;
}


剑栈风樯各苦辛,别时冰雪到时春
2018-10-19 22:50



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-490520-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.837992 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved