将整数转换为数字数组[C]

时间:2014-01-07 17:40:46

标签: c arrays

我是编程的初学者,我以前从未在这里发帖。我已经找到了我的问题的答案,其中一个帖子是here ......但是我无法让他们的方法起作用。

我正试图通过做一些Project Euler挑战来学习C.对于其中一个挑战,我需要检查一个数字是否是回文。我以为我会通过将我的目标整数(称为product)加载到数组中来执行此操作,然后再检查元素对(寻找对称性)。

首先,我检查一下我的产品有多长:

productLength = ceil(log10(product)); 

然后我有一个循环尝试将该整数加载到我的数组中,名为inspection:

for(x = productLength; x <= 0; x--) //decrement from product length and loop
{
    inspection[x - 1] = product % 10; //transfer product values to inspection array
    product /= 10; //prepare product value for next pass (move digits one place to the right)
}

这似乎不起作用。我知道这可能是一些愚蠢的错误,但我无法发现它。

4 个答案:

答案 0 :(得分:1)

这一行

for(x = productLength; x <= 0; x--)

应该是:

for(x = productLength; x >= 0; x--)

但是,这里有另一个问题。

    inspection[x - 1] = product % 10; //transfer product values to inspection array

循环将达到x = 0(包括x = 0),因此当x = 0时,这将导致索引无效。

所以循环应该如下所示:

for(x = productLength-1; x >= 0; x--)
{
    inspection[x] = product % 10;
    product /= 10;
}
inspection[productLength] = 0;

答案 1 :(得分:0)

你的for循环应该是:

for(x = productLength; x >= 0; x--)

而不是for(x = productLength; x <= 0; x--)

答案 2 :(得分:0)

所以这一行

productLength = ceil(log10(product)); 

应该更容易

productLength = log10(product) + 1;

作为

unsigned x = <some value > 0>;
size_t s = log10(x);

0 for all values of x < 10     
1 for all values of x < 100
2 for all values of x < 1000
...

使用ceil()有效,但我觉得使用它有点矫枉过正。


解决方案:

size_t productLength = log10(product) + 1; 
unsigned char inspection[productLength];

for (size_t x = productLength - 1; x >= 0; --x) //decrement from product length and loop
{
    inspection[x] = product % 10; //transfer product values to inspection array
    product /= 10; //prepare product value for next pass (move digits one place to the right)
}

答案 3 :(得分:0)

如果它是一个整数你需要进行回文检查,那么你可以只用字符串打印它并开始比较两端的字符:

int palindromic(int n)
{
    char str[20];
    int  result;
    int  i;

    sprintf(str, "%d", n);
    int length = strlen(str);

    for (result = 1, i = 0; i < length / 2 && result == 1; i++)
    {
        result = (str[i] == str[length - 1 - i]);
    }

    return result;
}