蓝桥杯ALGO-195 算法训练 1的个数
问题描述
输入正整数n,判断从1到n之中,数字1一共要出现几次。例如1123这个数,则出现了两次1。例如15,那么从1到15之中,一共出现了8个1。
输入格式
一个正整数n
输出格式
一个整数,表示1出现的资料
样例输入
15
样例输出
8
数据规模和约定
n不超过30000
查了一下大佬的思路,设计函数计算从1到n的每个数中1个个数再求和,重点在于如何计算数字中1的个数,可以设计while循环(用对10取余法)每次检测数字的最后一位是否为1,再让数字缩小十倍从而读取下一位
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int number(int a){
int i=a, num=0;
while(i){
if(i%10 == 1)
num++;
i /= 10;
}
return num;
}
int main(int argc, char** argv) {
int n;
cin >> n;
int i, sum=0;
for(i=1; i<=n; i++){
sum += number(i);
}
cout << sum;
return 0;
}