Программа C начинается с сохранения строкового ввода, представляющего собой число: «134», и сохраняет каждый символ в массив символов. Затем он начинается с последнего символа массива «4», а затем умножается на 10 ^ 0, затем следующий элемент умножается на 10 ^ 1 и так далее...
Пример: сумма = (4 * 10 ^ 0) + (3 * 10 ^ 1) + (1 * 10 ^ 2)
Мне не разрешено использовать встроенную библиотеку pow, поэтому я реализовал ее сам. Программа работает только тогда, когда входная строка состоит из единиц или десятков, например: 5, 56, 28 и т. д., но не работает для любого числа в сотнях или выше. (Я начал получать сообщения об ошибках seg в тот момент, когда добавил j++)
#include <stdio.h>
int pow(int, int);
int i;
int result;
#define SIZE 10
char input[SIZE];
int j = 0;
int main(){
printf("Enter a word of positive number or quit: ");
scanf("%s", input);
int sum = 0;
for(i = strlen(input)-1; i >= 0; i--){
printf("pow: %d\n", (input[i] - '0') * pow(10, j));
sum = sum + ((input[i] - '0') * pow(10,j));
printf("sum: %d\n", sum);
j++;
printf("j: %d\n", j);
}
printf("%d\n", sum);
}
int pow(int base, int exponent){
if(exponent == 0) return 1;
if(exponent == 1) return base;
result = 1;
for(i = 0; i < exponent; i++){
result = result * base;
}
return result;
}
i, i, input
переменные принадлежатmain
.result
принадлежитpow
. - person Everyone   schedule 25.02.2020strlen()
иpow()
можно исключить, и в этом случае вам даже не нужен буферinput
, вы можете использоватьgetchar()
для обработки одного символа за раз. 32-битныйint
может содержать до 10 десятичных цифр, поэтому здесьSIZE
слишком мал - если вам приходится иметь дело со знаком +/-, вам также понадобится дополнительный символ для этого. - person Clifford   schedule 26.02.2020sum = sum*10 + (input[i] - '0');
, если он действительно лучше. Лучше всего позволить компилятору сделать эту оптимизацию или получить лучший компилятор. - person chux - Reinstate Monica   schedule 26.02.2020