c - 计算数字的总和。如果数字重复,不要计算它
问题描述
我的问题是如何在不使用数组的情况下检查数字是否在整数中重复?
例如:123145... 1 重复两次。所以输出应该是 15 (1+2+3+4+5)
我目前的代码是:
# include "stdio.h"
int main () {
int input = 0;
int sum = 0;
int input = 0;
int sum = 0;
int digit;
printf("Please enter a number: ");
scanf("%d" ,&input);
while(input > 0) {
digit = input % 10;
if(d0 < 1) {
sum += digit;
d0 = 1;
}
input /= 10;
}
printf("Sum of different digits is: %d\n", sum);
return 0;
}
解决方案
这是解决这个问题的一种非常愚蠢的方法,但它既不使用数组也不使用位向量:
#include <stdbool.h>
bool numberHasDigit(unsigned n, unsigned digit) {
while (n) {
if (n % 10 == digit) return true;
n /= 10;
}
return false;
}
unsigned sumOfUniqueDigits(unsigned n) {
unsigned sum = 0;
for (unsigned digit = 1; digit <= 9; ++digit) {
if (numberHasDigit(n, digit)) sum += digit;
}
return sum;
}
这很愚蠢,因为使用标志的数组(或位向量)要快得多,尤其是对于大数字,而且代码同样简单:
unsigned sumOfUniqueDigits(unsigned n) {
bool seen[10] = {false};
unsigned sum = 0;
while (n) {
unsigned digit = n % 10;
if (!seen[digit]) {
sum += digit;
seen[digit] = true;
}
n = n / 10;
}
return sum;
}
推荐阅读
- android - 我如何在 android studio 中“运行”这个应用程序?
- java - 为什么客户端重新连接会导致与 netty 的双重连接
- python - xlwings:保存并关闭
- java - 使用 WiringPI 创建共享库
- importerror - flask-mongoengine 从 mongoengine.document 导入文档,EmbeddedDocument ImportError:无法导入名称文档
- ios - iOS:无法在 cordova-plugin-advanced-http 中使用固定证书模式
- ios - swift中表格视图中的嵌套部分
- linkedin - LinkedIn 有测试其 API 的游乐场吗?
- go - 无法根据 Golang 中的条件将接口转换为结构
- ios - 获取两个日期之间的工作日/月份数字并增加日期