转换为数组个位数的双精度

doubles converted into single digits for an array

本文关键字:双精度 数组 转换      更新时间:2023-10-16

我正在编写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::isdigitnum.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
}