每天学习一点编程(8)(输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数)

这篇博客介绍了如何用C++编程解决输入一个整数n,统计从1到n所有整数中数字1出现的次数问题。方法是通过判断每个数的个位和十位是否为1,对于大于10的数字,需要对10取余再进行判断。这种方法的时间复杂度为O(n)。
摘要由CSDN通过智能技术生成
输入一个整数n,求从1 到n 这n 个整数的十进制表示中1 出现的次数。

例如输入12,从1 到12 这些整数中包含1 的数字有1,10,11 和12,1 一共出现了5 次。

思路一:我们每次判断整数的个位数字是不是1。如果这个数字大于10,对10取余 之后再判断个位数字是不是1。(对每一个数x,x先与10取余,然后判断x/10之后,是否为0,不为0则继续上述操作 复杂度为o(n) )

#in
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用栈来实现将十进制整数n转换为d进制整数的操作。具体步骤如下: 1. 创建一个空栈,用来存储转换后的d进制整数的每一位。 2. 从n的最低位开始,不断进行以下操作: a. 将n除以d,得到商和余数。 b. 将余数压入栈。 c. 将n更新为商。 3. 当n为时,说明所有位都已经转换完毕,此时可以从栈依次弹出每一位,得到转换后的d进制整数。 下面是具体的代码实现: ``` #include <iostream> #include <stack> using namespace std; void decimalToD(int n, int d) { stack<int> s; while (n > ) { int remainder = n % d; s.push(remainder); n /= d; } while (!s.empty()) { cout << s.top(); s.pop(); } } int main() { int n, d; cout << "请输入一个十进制整数n和目标进制d:"; cin >> n >> d; cout << "转换后的" << d << "进制整数为:"; decimalToD(n, d); cout << endl; return ; } ``` 在上面的代码,我们首先定义了一个函数decimalToD,它接受两个参数n和d,分别表示待转换的十进制整数和目标进制。在函数,我们创建了一个空栈s,然后不断进行除法运算,将余数压入栈。最后,我们从栈依次弹出每一位,得到转换后的d进制整数。 在主函数,我们首先从用户输入获取n和d的,然后调用decimalToD函数进行转换,并输出结果。 例如,如果用户输入n=123和d=2,则程序会输出转换后的二进制整数为1111011。 ### 回答2: 要利用栈的基本操作将一个十进制整数n转换为d进制整数,可以使用以下步骤: 1. 创建一个空栈stack。 2. 不断地进行以下操作:n除以d,将余数入栈stack,n更新为商,直到n小于d。 3. 将最后一个余数入栈stack。 4. 依次弹出栈stack的元素,并将它们连接起来,形成一个字符串result,即为n的d进制形式。 下面是利用栈的基本操作编写的Python代码: ```python def decimal_to_d(n: int, d: int) -> str: stack = [] while n >= d: stack.append(n % d) n //= d stack.append(n) result = '' while stack: result += str(stack.pop()) return result ``` 举个例子,将十进制数12345转换为二进制数: ```python >>> decimal_to_d(12345, 2) '11000000111001' ``` 这个方法的时间复杂度为O(logd(n)),因为每次将n除以d都会将n的位数减少一半,总共需要进行logd(n)次。 ### 回答3: 栈是一种后进先出(Last In First Out,LIFO)的数据结构,可以用来实现数据的逆序存储和处理。在将一个十进制整数n转换为d进制整数时,可以利用栈的基本操作,实现将n转换为d进制的操作。 首先,我们需要将n不断地除以d,得到的余数入栈,并将n更新为商。这样,就可以得到n的一组从右往左的d进制数。接着,我们从栈顶开始依次弹出栈的元素,得到的就是从左往右的d进制数。 具体实现上,可以利用语言自带的栈或手动实现栈结构。以Python为例,可以使用列表模拟一个栈,实现以下代码: ``` def conversion(n, d): # 建立一个列表模拟栈 stack = [] # 循环计算余数并入栈 while n > 0: remainder = n % d stack.append(remainder) n = n // d # 从栈顶开始弹出元素,得到d进制数 result = "" while stack: result += str(stack.pop()) return result ``` 在上述代码,我们定义了一个名为conversion的函数,接受两个参数n和d,分别表示输入的十进制数和目标进制数。在函数体,首先创建一个空栈stack,并进行循环,每次计算n除以d的余数,将余数入栈,然后将n更新为n除以d的商。当n为0时,循环结束。 随后,我们创建一个空字符串result,用于存储弹出栈元素得到的d进制数。从栈顶开始,每次弹出一个元素,将其转换为字符串类型,并添加到result的末尾。当栈为空时,循环结束。最后,函数返回result即可。 以上就是利用栈的基本操作,实现将任意一个十进制整数n转换为d进制整数的代码实现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值