43.数位五五

37 阅读1分钟

链接:ac.nowcoder.com/acm/problem…
来源:牛客网

题目描述

求出[a,b]区间内有多少个数数位之和为5的倍数

输入描述:

输入一行包含两个整数a,b (1<= a<= b<=1000000)

输出描述:

输出一个整数

示例1

输入

10 20

输出

2

说明

数位dp

14和19的数位和为5和10,符合条件   

核心思想是首先取到个位,然后加到位数和里面,最后自除截断个位的数。

核心代码

//定义i等于a,用来从a到b循环
for(int i = a;i <= b;i ++){
    //定义你等于i,用来获取各个位数
    int n = i;
    //定义个位
    int g;
    //定义位数和
    int sum = 0;
    
    //如果n不小于等于0,就以此循环,因为每次需要取到个位的数,然后截断个位
    while(n > 0){
        //取到个位的数
        g = n % 10;
        //然后加到位数和里面
        sum += g;
        //最后截断个位的数
        n /= 10;
    }
}

代码

#include <bits/stdc++.h>

using namespace std;

int main(){
    int a,b;
    cin >> a >> b;
    int ans = 0;
    
    for(int i = a;i <= b;i ++){
        int n = i;
        int g;
        int sum = 0;

        while(n > 0){
            g = n % 10;
            sum += g;
            n /= 10;
        }
        if(sum % 5 == 0) {
            ans++; 
        }
    }
   
    cout << ans;
    return 0;
}