双精度转换为数组的单个数字

时间:2014-02-26 18:58:18

标签: c++ arrays double

我正在编写Luhns算法,我需要输入一个10位数字,我正在考虑使用double,因为它足够大以容纳10位数字但是我需要将double转换为单个数字并输入它们一个数组。

以下是我想要做的一个例子:

input a 10 digit number
double num=7992739871
convert to single digits
int *array={7,9,9,2,7,3,9,8,7,1}

现在我不知道输入数字作为双倍是最好的选择,但它似乎是最明显的选择,任何帮助表示赞赏!

4 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

您可以使用/ 10% 10将数字拆分为数字。

此示例说明了如何查找长数字的数字:

  • 2368 / 10 ==&gt; 236
    • 236 / 10 ==&gt; 23
      • 23 / 10 ==&gt;的 2
      • 23 % 10 ==&gt; <强> 3
    • 236 % 10 ==&gt;的 6
  • 2368 % 10 ==&gt;的 8

答案 2 :(得分:0)

这样的事情应该有效(未编译):

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
}

答案 3 :(得分:0)

试试这样: -

int *array[10];
int num;
cin>>num;
for (int i =10; i >= 0; i--) {
    array[i] = num % 10;
    num /= 10;
}