В вашем коде есть несколько проблем, независимо от того, что вы не имитируете обычную atoi (которая получает строку в аргументе, больше основы, а также работает с отрицательными числами)
вы не меняете значение j , поэтому вы изменяете только val[0]
, и поскольку конец цикла не виден, мы не знаем, поставили ли вы последний нулевой символ где
ваш код очень сложен, например, почему вы вычисляете число цифр и мощность десяти за ход?
очевидно, вы не знаете, что оператор по модулю "%" существует
ноль бесполезно
моя программа только выводит ноль нулевых чисел
это из-за вашего способа подсчитывать количество цифр в каждом ходу, после удаления двух старших цифр из 16076 вы получаете 076, так что на самом деле 76 и вы обходите 0
Правильно после того, как вы вычислили один раз количество цифр, чтобы записать число в обратном порядке, начиная с нижней цифры
Например, если, как и вы, я выделяю строку и управляю только положительными числами, решение может быть:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char ** argv)
{
if (argc != 2)
printf("Usage: %s <positive number>\n", *argv);
else {
int n;
if ((sscanf(argv[1], "%d", &n) != 1) || (n < 0))
fprintf(stderr, "invalid number '%s'\n", argv[1]);
else {
int v;
size_t ndigits;
if (n == 0)
ndigits = 1;
else
for (v = n, ndigits = 0; v != 0; v /= 10, ++ndigits)
; /* empty body */
char * s = malloc(ndigits + 1);
s[ndigits] = 0;
do {
s[--ndigits] = n % 10 + '0';
n /= 10;
} while (ndigits != 0);
puts(s);
free(s);
}
}
return 0;
}
Компиляция и исполнение:
pi@raspberrypi:/tmp $ gcc -g -pedantic -Wextra -Wall i.c
pi@raspberrypi:/tmp $ ./a.out 16076
16076
pi@raspberrypi:/tmp $
Исполнение под valgrind :
pi@raspberrypi:/tmp $ valgrind ./a.out 16076
==6822== Memcheck, a memory error detector
==6822== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.
==6822== Using Valgrind-3.13.0 and LibVEX; rerun with -h for copyright info
==6822== Command: ./a.out 16076
==6822==
16076
==6822==
==6822== HEAP SUMMARY:
==6822== in use at exit: 0 bytes in 0 blocks
==6822== total heap usage: 2 allocs, 2 frees, 1,030 bytes allocated
==6822==
==6822== All heap blocks were freed -- no leaks are possible
==6822==
==6822== For counts of detected and suppressed errors, rerun with: -v
==6822== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 6 from 3)
pi@raspberrypi:/tmp $