注册 登录
编程论坛 C++教室

此代码是书的页码求解。但是我看不懂原理

kireirain 发布于 2018-10-19 19:03, 1159 次点击
输入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;
}
1 回复
#2
林月儿2018-10-19 22:50
应该是轮询每个位上出现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;
}

只有本站会员才能查看附件,请 登录
1