Господа, нужен код на Си, который переводит числа из троичной системы счисления в десятичную.
Условия: Использовать только библиотеку и использовать ф-ю case.
Нужно срочно!
C/C++
ГОСПОДА, нужна помощь по Си!
#include <stdio.h>
#include <math.h>
int test_troi(int num)
{
int rc = 1;
while(num > 0)
{
if( (num % 10) > 2 ) return 0;
num /= 10;
}
return rc;
}
int troiToDec(int num)
{
int rc = 0;
int i = 0;
while(num > 0)
{
rc += (num % 10)*pow(3.0,i);
i++;
num /= 10;
}
return rc;
}
int main()
{
int troi;
int dec;
scanf("%d", &troi);
if(!test_troi(troi))
{
printf("Введено не троичное число! \r\n");
return 1;
}
dec = troiToDec(troi);
printf("Получилось число %d.\r\n", dec);
return 0;
}
/* не знаю, как сюда в код добавить инструкцию case
* подумайте сами или дождитесь второй ответ.
*/
#include <math.h>
int test_troi(int num)
{
int rc = 1;
while(num > 0)
{
if( (num % 10) > 2 ) return 0;
num /= 10;
}
return rc;
}
int troiToDec(int num)
{
int rc = 0;
int i = 0;
while(num > 0)
{
rc += (num % 10)*pow(3.0,i);
i++;
num /= 10;
}
return rc;
}
int main()
{
int troi;
int dec;
scanf("%d", &troi);
if(!test_troi(troi))
{
printf("Введено не троичное число! \r\n");
return 1;
}
dec = troiToDec(troi);
printf("Получилось число %d.\r\n", dec);
return 0;
}
/* не знаю, как сюда в код добавить инструкцию case
* подумайте сами или дождитесь второй ответ.
*/
Андрей Сафронов
по-французски три будет trois, а не toi, малость ошибся.
Без проверки корректности вводимых данных и только для относительно небольших вводимых чисел:
#include <stdio.h>
int Abs(long long x)
{
return (x > 0) ? x : -x;
}
int main()
{
long long l,m,n;
int i,j,sign;
for (;;)
{
printf("n = ?\b");
scanf("%lld",&n);
if (n < 0) sign=-1;
else sign=1;
n=Abs(n);
m=0;
l=1;
while(n)
{
j=n%10;
switch (j)
{
case 0:
case 1:
case 2: m+=l*j;
}
printf("%lld\n",m);
n/=10;
l*=3;
}
printf("%lld\n",sign*m);
}
}
А вообще-то лучше вводить число в строковом представлении, чтобы потòм через case переводить символы цифр в однозначные числа и работать с ними. Для сравнения: типом long long можно вводить десятичные числа в пределах от -2⁶³+1 до 2⁶³-1, то есть максимум 19-изначные. Строкой же можно будет вводить даже 39-изначные числа, записанные в троичном представлении.
#include <stdio.h>
int Abs(long long x)
{
return (x > 0) ? x : -x;
}
int main()
{
long long l,m,n;
int i,j,sign;
for (;;)
{
printf("n = ?\b");
scanf("%lld",&n);
if (n < 0) sign=-1;
else sign=1;
n=Abs(n);
m=0;
l=1;
while(n)
{
j=n%10;
switch (j)
{
case 0:
case 1:
case 2: m+=l*j;
}
printf("%lld\n",m);
n/=10;
l*=3;
}
printf("%lld\n",sign*m);
}
}
А вообще-то лучше вводить число в строковом представлении, чтобы потòм через case переводить символы цифр в однозначные числа и работать с ними. Для сравнения: типом long long можно вводить десятичные числа в пределах от -2⁶³+1 до 2⁶³-1, то есть максимум 19-изначные. Строкой же можно будет вводить даже 39-изначные числа, записанные в троичном представлении.
Похожие вопросы
- Программирование, нужна помощь в решение задачи! На си или си++
- Нужна помощь с выполнением заданий в C++
- Нужна помощь в составлении одномерных массивов С++
- C++.Нужна помощь в написании кода.
- Очень нужна помощь. нужен код на C. Задачка будет в описании.
- Нужна помощь с написанием кода на языке "С"
- Программисты, нужна помощь
- Мне нужна помощь с одной задачкой по c++.
- Нужен код на Си помогите пж
- Нужен код на Си помогите пожалуйста