| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1031 人关注过本帖
标题:此代码是书的页码求解。但是我看不懂原理
只看楼主 加入收藏
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
帖 子:2277
专家分: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
快速回复:此代码是书的页码求解。但是我看不懂原理
数据加载中...
 
   



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

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