编程:求正整数内与7无关(数字中不含7,不是7的倍数)的所有数之和

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了编程:求正整数内与7无关(数字中不含7,不是7的倍数)的所有数之和相关的知识,希望对你有一定的参考价值。

参考技术A 正整数范围无穷大,是求不出来的!
编程思想如下:
首先声明一个 整形的变量Result=0,用作存储整数之和
先获得一个正整数,首先判断能否被7整除(用%判定),如果能,则结束本次循环,否则将该整数转化为字符串,看其中有没有字符’7‘,如果有,结束本次循环,否则Result+=该数

1-1统计数字问题

′问题描述:
一本书的页码从自然数 1 开始顺序编码直到自然数 n。书的页码按照通常的习惯编排,
每个页码都不含多余的前导数字 0。例如,第 6 页用数字 6 表示,而不是 06 或 006 等。数
字计数问题要求对给定书的总页码 n,计算出书的全部页码中分别用到多少次数字 0,1,
2,…,9。
′编程任务:
给定表示书的总页码的 10 进制整数 n (1≤n≤109
) 。编程计算书的全部页码中分别用
到多少次数字 0,1,2,…,9。
′数据输入:
输入数据由文件名为 input.txt 的文本文件提供。
每个文件只有 1 行,给出表示书的总页码的整数 n。
′结果输出:
程序运行结束时,将计算结果输出到文件 output.txt 中。输出文件共有 10 行,在第 k 行
输出页码中用到数字 k-1 的次数,k=1,2,…,10。
输入文件示例 输出文件示例
input.txt output.txt
11 1
4
1
1
1
1
1
1
1
1
【题解】

000..0~999..9 (n个9)
则0~9中每个数字出现的次数都是n*10^(n-1),即每个数字出现次数相同。
但是因为不含前导0.
所以要把多算的0给去掉。
具体的,设n这个数字的长度为L,则需要减去1111....1(L个1)个多余的0.
然后做个数位DP就好。
详见:https://www.cnblogs.com/AWCXV/p/7632451.html

【代码】

#include <cstdio>
#include <iostream>
#include <string>
using namespace std;

string s;
int _pow = 1;
int cnt[10];

int get_num(int l,int r){
    int temp = 0;
    for (int i = l;i <= r;i++){
        temp = temp*10+s[i]-'0';
    }
    temp++;
    return temp;
}

int main(){
    cin >> s;
    int len = s.size();
    for (int i = 1;i <= len-1;i++) _pow*=10;
    for (int i = 0;i < len;i++){
        int si = s[i]-'0';
        for (int j = 0;j <= 9;j++) cnt[j]+=si*(len-i-1)*_pow/10;
        for (int j = 0;j <=si-1;j++){
            cnt[j]+=_pow;
        }
        cnt[si]+=get_num(i+1,len-1);
        _pow=_pow/10;
    }
    int more0 = 0;
    for (int i= 1;i <= len;i++){
        more0 = more0*10+1;
    }
    cnt[0]-=more0;
    for (int i = 0;i <= 9;i++){
        cout<<cnt[i]<<endl;
    }
    return 0;
}

以上是关于编程:求正整数内与7无关(数字中不含7,不是7的倍数)的所有数之和的主要内容,如果未能解决你的问题,请参考以下文章

HDU 4507 求指定范围内与7不沾边的所有数的平方和 (数位DP)

C# 06.求正整数各位数字之和

C++问题 与7无关的数!

Acwing1086. 恨7不成妻(未解决)

与7无关的数

Java 编程 与7相关的数.现求所有小于等于n(n < 100)的与7无关的数