幸运数

xiaoxiao2021-02-28  109

题目描述

小明同学学习了不同的进制之后,拿起了一些数字做起了游戏。小明同学知道,在日常生活中我们最常用的是十进制数,而在计算机中,二进制数也很常用。现在对于一个数字x,小明同学定义出了两个函数f(x)和g(x)。 f(x)表示把x这个数用十进制写出后各个数位上的数字之和。如f(123)=1+2+3=6。 g(x)表示把x这个数用二进制写出后各个数位上的数字之和。如123的二进制表示为1111011,那么,g(123)=1+1+1+1+0+1+1=6。 小明同学发现对于一些正整数x满足f(x)=g(x),他把这种数称为幸运数,现在他想知道,小于等于n的幸运数有多少个?

输入描述:

每组数据输入一个数n(n<=100000)

输出描述:

每组数据输出一行,小于等于n的幸运数个数。 示例1

输入

21

输出

3

python

def f(n): rlt = 0 while n: rlt += n n //= 10 return rlt def g(n): rlt = 0 while n: rlt += n%2 n //= 2 return rlt n = int(input()) # n = 21 cnt = 0 for i in range(1, n+1): if f(i) == g(i): cnt += 1 print(cnt)

C语言

#include <stdio.h> #include <stdlib.h> int f(int n) { int tmp = n; int rlt = 0; while(tmp) { rlt += tmp; tmp /= 10; } return rlt; } int decToBin(int n) { int tmp = n; int rlt = 0; int i = 1; while(tmp) { rlt += tmp%2*i; printf("%d:%d\n", i, rlt); i *= 10; tmp /= 2; } return rlt; } int g(int n) { int tmp = n; int rlt = 0; while(tmp) { rlt += tmp%2; tmp /= 2; } return rlt; } int main() { int n, i; scanf("%d", &n); int cnt = 0; for(i=1; i<=n; i++) { if(f(i) == g(i)) { cnt++; } } printf("%d\n", cnt); system("pause"); }

转载请注明原文地址: https://www.6miu.com/read-2150102.html

最新回复(0)