我正在编写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}
现在我不知道输入数字作为双倍是最好的选择,但它似乎是最明显的选择,任何帮助表示赞赏!
答案 0 :(得分: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
。
答案 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;
}