Программирование системы счисления решение задач

Уравнения и сложные задачи на системы счисления (страница 5)

В ответ запишите наибольший корень в семеричной системе счисления.

Переведём числа в десятичную систему счисления:

Теперь решим уравнение в десятичной системе счисления:

Наибольший корень \(x=10_=1\cdot3^1+1\cdot3^0=13_3.\)

Сколько четверок содержится в пятеричной записи числа \(25^+5^-125^\) ?

Приведем к общему основанию:

Переведем в пятеричную систему счисления и получим:

Сколько значащих нулей содержится в троичной записи числа \(9^+27^-81^\) ?

Приведем к общему основанию:

Переведем в троичную систему счисления и получим:

Решите уравнение: \(22_\cdot x^-12x+100_=0\)

Ответ запишите наименьший корень в двоичной системе счисления.

Переведем в десятичную систему счисления:

Переведем в двоичную систему счисления наименьший корень

Сколько единиц в двочиной записи числа \(2^+4^5+2?\)

Для начала стоить отметить, что любое десятичное число A в n-ой степени можно записать как единицу и n нулей в системе счисления с основанием A: \(_=<1\overbrace<00. 000>^n>_A\)
Так как нас просят узнать количество единиц в двоичной системе, представим все числа как степени двойки, получим: \(2^+4^5+2=2^+()^5+2^1=2^+2^+2^1.\) В двоичной системе счисления эта запись выглядит так: \(1\overbrace^+1\overbrace^+10.\)
Далее выполняем сложение и наглядно получаем ответ:
\[\begin + \begin 10. 000..0000. 000\\ 1000. 000\\ 10\\ \end\\ \hline \begin 1\underbrace_1\underbrace_10 \end \end\]

Сколько четверок содержится в пятеричной записи числа \(5^+25^3-117?\)

Для начала стоить отметить, что любое десятичное число A в n-ой степени можно записать как единицу и n нулей в системе счисления с основанием A: \(_=<1\overbrace<00. 000>^n>_A\)
Так как нас просят узнать количество четверок в пятеричной системе, представим все числа как степени пятерки, а 117, поскольку оно не является степенью пятерки, перевдем в пятеричную систему счисления, получим:
\(5^+25^3-117=5^+()^3-(4\cdot5^2+3\cdot5^1+2\cdot5^0)=5^+5^6-432.\)
Для начала выполним сложение:
\[\begin + \begin 10. 000..000\\ 1000000\\ \end\\ \hline \begin 1\underbrace_71000000 \end \end\] Вычтем из полученного 432:
\[\begin — \begin _\\ 10. 01000000\\ 432\\ \end\\ \hline \begin 1\underbrace_8444013 \end \end\\\] Примечание: при вычитании в недесятичной системе счисления, мы занимаем не “десяток”, а само основание системы счисления. В данном примере из второй единицы(она стоит в 6 разряде) мы занимаем пять в соседний разряд, и затем из полученной “пятерки” занимаем в следующий разряд, таким образом продолжая до последней цифры.

Запись некоторого натурального десятичного числа в системах счисления с основаниями 4 и 6 оканчивается 0. Найдите минимальное возможное число, удовлетворяющее данному условию.

Если число оканчивается цифрой 0, это значит, что оно делится на основание системы счисления без остатка. Значит, необходимо найти наименьшее число, которое кратко как 4, так и 6 — это число 12.

Источник

Задача: преобразование систем счисления

Имеются 2 цифры в разных системах счисления, цель задачи найти, в каких системах счисления 2 цифры равны. Например, 12 и 5, в десятичной системе счисления они не равны, но 12 в 3-чной системе счисления и 5 в 6-чной или десятичной системе счисления равны между собой.

Вводятся два числа M и N ( которые в десятичной системе не превышают 1000000000), системы счисления находятся в диапазоне 2~36. Для чисел меньше 10 использовать цифры 0~9, для чисел больше 10 использовать заглавные буквы A~Z.

Вывести в каких системах счисления M и N равны. Если равны, вывести соответствующий результат (если результатов несколько, вывести тот результат, в котором система счисления наименьшая), если не равны, вывести ошибку.

Output:
12 (base 3) = 5 (base 6)↵

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
#include #include #include int check (char m1[256], char n1[256]) { int i, j; for (i=2; i36; i++) for (j=2; j36; j++) if (strtol( m1, NULL, i ) == strtol( n1, NULL, j )) { printf ("%s (base %d) = %s (base %d)\n", m1, i, n1, j); return 1; } printf("%s is not equal to %s in any base 2..36\n", m1, n1); return 0; } int main() { long int m, n, i; char m1[256], n1[256]; scanf("%d %d", &m, &n); sprintf(m1, "%ld", m); sprintf(n1, "%ld", n); check(m1, n1); printf("\n"); system("PAUSE"); return 0; }

1)
при вводе:
12 5↵
ответ правильный:
2 (base 3) = 5 (base 6)↵

2)
про вводе:
10 A↵
ответ должен быть:
10 (base 10) = A (base 11)↵
у меня получается:
10 is not equal to -1073909472 in any base 2..36↵

3)
про вводе:
12 456↵
ответ должен быть:
12 is not equal to 456 in any base 2..36↵
у меня получается:
12 (base 27) = 456 (base 6)↵

подскажите, пожалуйста, что не так?

Добавлено через 6 минут
понял в чем 2 ошибка, исправил код:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
#include #include #include int check (char m[256], char n[256]) { int i, j; for (i=2; i36; i++) for (j=2; j36; j++) if (strtol( m, NULL, i ) == strtol( n, NULL, j )) { printf ("%s (base %d) = %s (base %d)\n", m, i, n, j); return 1; } printf("%s is not equal to %s in any base 2..36\n", m, n); return 0; } int main() { long int i; char m[256], n[256]; scanf("%s %s", &m, &n); check(m, n); printf("\n"); system("PAUSE"); return 0; }

а как быть с третьей ошибкой?

Добавлено через 1 час 14 минут
вот код моего соседа из Японии, у него все ответы правильные, но код какой то слишком большой получился, я ничего не смог разобрать:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145
#include int change(char c) { int result=-1; if ((c>='0')&&(c'9')) {result=(c-'0');} else if((c>='A')&&(c'Z')) {result=(c-'A')+10;} else if((c>='a')&&(c'z')) {result=(c-'a')+10;} return result; } long double m(int x,int y) { long double result=1; for(int i=0;iy;i++) result=result*x; return result; } long double f(int *a,int lenth,int base) { long double result=0; int k=0; for(int i=lenth;i>0;i--) { result=result+(*(a+k))*m(base,i-1); k++; } return result; } int main() { int w=0; int num[2][40]; for(int i=0;i2;i++) { for(int j=0;j40;j++) {num[i][j]=-1;} } char ch[80]; char ch1[40],ch2[40]; int choice=0; int m=0; gets(ch); for(int i=0;i1;i++) { if(ch[i]==' ') { for(int j=i;j40;j++) { ch[j]=ch[j+1]; } i=i-1; } } for(int i=0;i80;i++) { if(ch[i]=='\0') break; else if(ch[i]==32) {choice=1;m=0;} else {num[choice][m]=change(ch[i]);m++;} } int max1=1,max2=1; for(int i=0;i40;i++) { if(num[0][i]>max1) max1=num[0][i]; if(num[1][i]>max2) max2=num[1][i]; } int lenth1=0,lenth2=0; for(int i=0;i40;i++) { if(num[0][i]==-1) break; lenth1++; } for(int i=0;i40;i++) { if(num[1][i]==-1) break; lenth2++; } for(int i=0;i40;i++) { if(ch[i]==' ') { for(int j=i;j40;j++) { ch[j]=ch[j+1]; } i=i-1; } } char *chp; chp=&ch[0]; for(int i=0;ilenth1;i++) { ch1[i]=*chp; chp++; } ch1[lenth1]='\0'; for(int i=0;ilenth2;i++) { ch2[i]=*chp; chp++; } ch2[lenth2]='\0'; for(int i=max1+1;i37;i++) { for(int j=max2+1;j37;j++) { if(f(&num[0][0],lenth1,i)==f(&num[1][0],lenth2,j)) { printf("%s (base %d) = %s (base %d)\n",ch1,i,ch2,j); w=1; if (w==1) break; } if (w==1) break; } if (w==1) break; } if(w==0) printf("%s is not equal to %s in any base 2..36\n",ch1,ch2); }

Источник

Читайте также:  Обо мне
Оцените статью