输入一个十进制整数 num 。该整数组成一个数组,数组中唯一元素是那些只出现 恰好一次 的元素,求 num 中唯一元素的 和 res。 其中,输入的数字num的位数不超过10000。
时间: 2023-12-03 09:46:22 浏览: 72
可以先使用哈希表(字典)统计每个数字出现的次数,然后再遍历一遍哈希表,将只出现一次的数字相加即可。
具体实现如下:
```python
def unique_sum(num):
# 统计数字出现的次数
freq = {}
for digit in str(num):
freq[digit] = freq.get(digit, 0) + 1
# 计算只出现一次的数字的和
res = 0
for digit, count in freq.items():
if count == 1:
res += int(digit)
return res
```
注意,上述代码中使用了字典的 `get()` 方法来获取数字出现的次数,如果字典中不存在该数字,则会返回默认值0。
相关问题
用在同一个链表中实现将一个十进制整数转换成八进制整数,要求输入一个十进制数,输出一个八进制数;将一个十进制整数转换成二进制整数,要求输入一个十进制数,输出一个二进制数;用C语言代码表示
在C语言中,我们可以使用递归函数来分别实现十进制到八进制和二进制的转换,因为这两种进制转换都是通过不断除以基数并取余数的过程完成的。以下是两个函数的例子:
1. 十进制转八进制:
```c
#include <stdio.h>
#include <string.h>
// Function to convert decimal to octal using recursion
void dec_to_oct(int num, char* octal) {
if (num == 0)
return;
octal[strlen(octal)] = '0' + num % 8; // Add digit to octal string
dec_to_oct(num / 8, octal); // Recursively call with reduced number
}
int main() {
int decimal;
printf("Enter a decimal number: ");
scanf("%d", &decimal);
char octal[40]; // Assuming the maximum octal value is less than 9 digits
dec_to_oct(decimal, octal);
octal[strlen(octal) - 1] = '\0'; // Adding null terminator
printf("Octal representation: %s\n", octal);
return 0;
}
```
2. 十进制转二进制:
```c
#include <stdio.h>
#include <stdbool.h>
// Function to convert decimal to binary using recursion
bool dec_to_bin(int num, char* binary) {
if (num == 0)
return false;
binary[strlen(binary)] = num % 2 ? '1' : '0'; // Add bit to binary string
return dec_to_bin(num / 2, binary);
}
int main() {
int decimal;
printf("Enter a decimal number: ");
scanf("%d", &decimal);
char binary[40]; // Assuming the maximum binary value is less than 32 bits
if (!dec_to_bin(decimal, binary)) {
binary[0] = '0'; // Handle case when input is 0 by adding leading 0
}
binary[strlen(binary) - 1] = '\0'; // Adding null terminator
printf("Binary representation: %s\n", binary);
return 0;
}
```
1. 利用顺序栈将一个十进制整数转换成八进制整数,要求输入一个十进制数,输出一个八进制数; 2 利用链栈将一个十进制整数转换成二进制整数,要求输入一个十进制数,输出一个二进制数;
1. 将十进制整数转换成八进制整数,可以采用“除8取余”的方法。具体步骤如下:
- 创建一个顺序栈(数组)来存储每次除法的余数。
- 输入十进制数,从高位开始,不断除以8并记录余数。
- 当商为0时,停止操作,然后从栈顶开始读取余数,逆序拼接得到的就是八进制数。
伪代码示例:
```plaintext
stack = []
num = input_decimal
while num > 0:
remainder = num % 8
stack.append(remainder)
num //= 8
octal_num = ''
while not stack.isEmpty():
octal_num += str(stack.pop())
print(octal_num)
```
2. 转换成二进制整数,则同样从高位开始,用位运算处理:
- 使用链栈(链表结构),每次将剩余的二分之一位存入新的节点。
- 输入十进制数,将其依次左移一位,并检查是否大于1,如果是则新创建一个节点存下1,否则存0。
伪代码示例:
```plaintext
class Node:
def __init__(self, value=0):
self.value = value
self.next = None
head = None
num = input_decimal
while num > 0:
bit = num & 1
new_node = Node(bit)
if head is None:
head = new_node
else:
current_node.next = new_node
num >>= 1
binary_num = ''
current = head
while current is not None:
binary_num += str(current.value)
current = current.next
print(binary_num)
```
阅读全文