#include <stdio.h>
#include <string.h>
int main(void) {
int a = 0, b = 0, c = 0;
int len = 0, i = 0;
char operation = '\0';
char input[201] = {0};
printf("%s\n", "Enter the expression:");
scanf("%s", input);
len = strlen(input);
for (i = 0; (input >= '0') && (input <= '9'); i++)
a = a * 10 + (input - '0');
operation = input;
for (++i; i < len; i++)
b = b * 10 + (input - '0');
switch(operation) {
case '+':
c = a + b;
break;
case '-':
c = a - b;
break;
case '*':
c = a * b;
break;
}
printf("%d\n", c);
return 0;
}
Помогите пожалуйста с 3-мя задачами по программированию(язык Си)
Лимит времени 2000/4000/4000/4000 мс. Лимит памяти 65000/65000/65000/65000 Кб.
В первой строке записано арифметическое выражение в виде: ЧислоОперацияЧисло. Число это натуральное число, не превышающее 10000. Операция - один из знаков +, -, *. В начале строки, в конце строки, а также между числами и знаком операции пробелов нет. Гарантируется, что длина строки не превышает 200 символов.
Необходимо вывести результат вычисления выражения.
Ввод Вывод
154+3 157
Задача №2:
Даны два числа. Найти их наибольший общий делитель.
Ввод
Вводятся два натуральных числа, не превышающих 109.
Вывод
Выведите НОД введённых чисел.
Ввод
9 12
Вывод
3
Задача №3:
Легендарный учитель математики Юрий Петрович придумал забавную игру с числами. А именно, взяв произвольное целое число, он переводит его в двоичную систему счисления, получая некоторую последовательность из нулей и единиц, начинающуюся с единицы. (Например, десятичное число 1910 = 1*24+0*23+0*22+1*21+1*20 в двоичной системе запишется как 100112.) Затем учитель начинает сдвигать цифры полученного двоичного числа по циклу (так, что последняя цифра становится первой, а все остальные сдвигаются на одну позицию вправо), выписывая образующиеся при этом последовательности из нулей и единиц в столбик - он подметил, что независимо от выбора исходного числа получающиеся последовательности начинают с некоторого момента повторяться. И, наконец, Юрий Петрович отыскивает максимальное из выписанных чисел и переводит его обратно в десятичную систему счисления, считая это число результатом проделанных манипуляций. Так, для числа 19 список последовательностей будет таким:
10011
11001
11100
01110
00111
10011
...
и результатом игры, следовательно, окажется число 1*24+1*23+1*22+0*21+0*20 = 28. Поскольку придуманная игра с числами все больше занимает воображение учителя, отвлекая тем самым его от работы с ну очень одаренными школьниками, Вас просят написать программу, которая бы помогла Юрию Петровичу получать результат игры без утомительных ручных вычислений.
Ввод
Ввод содержит одно целое число N (0 ≤ N ≤ 32767).
Вывод
Ваша программа должна вывести одно целое число, равное результату игры.
Ввод Вывод
19 28
Код:
3.
Код:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void) {
int a = 0, res = 0;
char str[17] = {'\0'}, max_str[17] = {'\0'}, temp = '\0';
int len = 0;
int i = 0, j = 0;
scanf("%d", &a);
itoa(a, str, 2);
for (len = strlen(str), i = 0; i < len; i++) {
if (strcmp(str, max_str) > 0)
strcpy(max_str, str);
temp = str[0];
for (j = 1; j < len; j++)
str[j-1] = str[j];
str[len-1] = temp;
}
for (j = 0; j < len; j++)
res = res * 2 + (max_str[j] - '0');
printf("%d\n", res);
return 0;
}
#include <stdlib.h>
#include <string.h>
int main(void) {
int a = 0, res = 0;
char str[17] = {'\0'}, max_str[17] = {'\0'}, temp = '\0';
int len = 0;
int i = 0, j = 0;
scanf("%d", &a);
itoa(a, str, 2);
for (len = strlen(str), i = 0; i < len; i++) {
if (strcmp(str, max_str) > 0)
strcpy(max_str, str);
temp = str[0];
for (j = 1; j < len; j++)
str[j-1] = str[j];
str[len-1] = temp;
}
for (j = 0; j < len; j++)
res = res * 2 + (max_str[j] - '0');
printf("%d\n", res);
return 0;
}
По задаче №2 - возьмите любой сборник олимпиадных задач по программированию, там одной из первых всегда идет эта задача.