转换为数组个位数的双精度
doubles converted into single digits for an array
我正在编写Luhns算法,我需要输入一个10位数字,我正在考虑使用双精度,因为它足够大,可以容纳一个10位数字,但是我需要将双精度转换为个位数并将它们输入到数组中。
以下是我想做的一个例子:
input a 10 digit number
double num=7992739871
convert to single digits
int *array={7,9,9,2,7,3,9,8,7,1}
现在我不知道将数字输入为双精度是否是最好的选择,但这似乎是最明显的选择,任何帮助都值得赞赏!
一个更简单的方法是在std::string
中读取:
std::string num;
std::cin >> num;
您可以使用std::isdigit
和num.size()
进行一些检查,以确保输入的格式正确。然后每个字符都简单地num[0] - '0'
、num[1] - '0'
等等。例如,以下方法有效:
auto not_digit = [](char c) { return !std::isdigit(c); };
auto nondigit_iter = std::find_if(num.begin(), num.end(), not_digit);
if (num.size() == 10 && nondigit_iter == num.end()) {
std::array<int, 10> digits;
auto digit_to_value = [](char c) { return c - '0'; };
std::transform(num.begin(), num.end(), digits.begin(), digit_to_value);
// Now digits contains the 10 values
}
您很幸运,您作为示例给出的值实际上可以用double
表示。并非所有 double
范围内的整数都是可表示的。通常,如果确实需要整数值,则需要使用整数类型。但是,在这种情况下,您真正想要的是 10 位数字的序列,而不是 10 位数字的值,因此您不妨使用 std::string
.
您可以使用
/ 10
和% 10
将数字拆分为数字。
此示例说明如何查找长数字的数字:
-
2368 / 10
==> 236-
236 / 10
==> 23-
23 / 10
==> 2 -
23 % 10
==> 3
-
-
236 % 10
==> 6
-
-
2368 % 10
==> 8
尝试这样做:-
int *array[10];
int num;
cin>>num;
for (int i =10; i >= 0; i--) {
array[i] = num % 10;
num /= 10;
}
这样的东西应该可以工作(不编译):
int *array = new int[log10(num)];
int temp = int(num);
for(int i=0;temp != 0; i++){
array[i] = temp%10;
temp = temp/10; // Integer division
}
相关文章:
- 如何在 C++ 中将双精度数组中的值"force convert"到字符串输出中?
- 对需要双精度数组和结构作为输入C++ DLL 函数的 C# 调用
- 在 C++ 中将双精度数组值转换为字符值
- C# 是否有办法将双精度数组强制转换为类似于C++转换为 char* 的字符串?
- 将协议缓冲区中的二进制双精度数组转换为 JavaScript 数字
- std::copy 将双精度数组复制到浮点数数组
- C++试图返回一个双精度数组的字符串(有点)
- 双精度数组和结果与 WIN32 和 WIN64 上的C++不一致
- 查找双精度数组中的第一个数字
- 如何将双精度数组从 C# 传递到 C++ (DLL)
- 如何将双精度数组从 VB6 传递到 VC++.这段代码有什么问题
- 双精度数组和堆损坏
- 将双精度数组从 Visual Basic 传递到 DLL C++
- 将字符指针强制转换为双精度数组/取消引用
- C++函数在一个双精度数组中查找最大值
- 将值从浮点数组传递到双精度数组时的奇怪行为(C, c++)
- 计算双精度数组中所有元素的和
- PInvoke:返回双精度数组的问题
- 如何在没有库的情况下有效地对双精度数组进行排序
- c++将静态二维双精度数组转换为双精度**