Использование atoi для преобразования строкового индекса в индекс массива - PullRequest
0 голосов
/ 13 июня 2019

Я делаю код, который вычисляет сумму цифр факториала, мое решение было преобразовать число в строку, а затем поместить эту строку в массив.

Я пытался использовать atoi для преобразования строкового индекса в индекс массива, но это не сработало, из-за ошибки «передача аргумента 1 из« atoi »делает указатель из целого числа без приведения»

#include <string.h>
#include <stdlib.h>
int fat(int x)
{
    if (x == 0 || x == 1)
    {
        return 1;
    }
    else
    {
        return x * fat(x-1);
    }
}

int main()
{
    int n, i, f=0, arr[30];
    char str[30];
    printf("Type the value of N: ");
    scanf("%d",&n);
    for (i=1;i<=n;i++)
    {
        f = fat(i);
    }
    printf("%d \n", f);
    sprintf(str, "%d", f);
    n=0;
    for (i=0;i<strlen(str);i++)
    {
        arr[i]=atoi(str[i]);
        n=n+arr[i];
    }
    printf("%d", n);
}

1 Ответ

0 голосов
/ 13 июня 2019

Если вы просто хотите преобразовать однозначный символ в число, вам не нужно использовать atoi(). Используйте str[i] - '0'.

        arr[i] = str[i] - '0';

Кажется, нет особого смысла в массиве. Вы можете просто сделать:

        n += str[i] - '0';

без сохранения всех чисел в массиве, который вы никогда не будете использовать снова.

...