Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Строка содержит запись натурального числа в n-ричной
- системе счисления (n задается пользователем, 0 < n < 10).
- Получить строку, содержащую десятичную запись этого числа.
- */
- #include <stdio.h>
- #include <stdlib.h>
- #include <math.h>
- #include <locale.h>
- #define LEN 100
- char *Scale="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
- int dig2int(char d);
- char *convert(char *n, int from, int to, int len);
- int FcountNum(char *str);
- int main(int argc, char *argv[])
- {
- setlocale(LC_ALL,"Russian");
- int i;
- char string[LEN] = "";
- //ввод строки
- printf("строка: ");
- scanf("%[^\n]%*c", string);
- //ввод системы счисления
- int ss;
- printf("Введите n (систему счисления)\nУчтите, что 0 < n < 10\n n = ");
- scanf("%d", &ss);
- //проверка введенной строки на наличие цифр
- //только из введенной сс
- //коды в ASCII:
- //0 - \0
- //48 - 0
- do {
- if (string[i] < 48 || string[i] >= ss + 48) {
- printf("\nОШИБКА:\n");
- printf("Введенная строка содержит цифру(ы), которых нет в %d сс\n", ss);
- _Exit(1);
- }
- i++;
- } while (string[i] != 0);
- //коррекность ввода системы счисления
- if (ss >= 10 || ss <= 0) {
- printf("\n\nОШИБКА:\n");
- printf("Вы ввели неверное значение n\n");
- _Exit(1);
- }
- int countNum = FcountNum(string);
- //перевод в другую сс и вывод результата
- char *Q;
- Q = convert(string, ss, 10, countNum);
- printf("результат: %s \n",Q);
- free(Q);
- return 0;
- }
- //подсчет количества натуральных цифр в строке
- int FcountNum(char *str)
- {
- int FcountNum = 0;
- for(int i = 0; i < LEN; i++) {
- if(str[i] >= 48 && str[i] <= 57) {
- FcountNum++;
- }
- }
- return FcountNum;
- }
- int dig2int(char d)
- {
- int i;
- for (i = 0; i < 36; i++) {
- if (Scale[i]==d) {
- return i;
- }
- }
- }
- char *convert(char *n, int from, int to, int len)
- {
- int i,j,l,p,k;
- char *buf;
- l = len;
- p = 0;
- for (i = 0; i < l; i++) {
- p = p * from + dig2int(n[i]);
- }
- buf = (char *) calloc(100, 1);
- k = 99;
- l = 0;
- while(1)
- {
- j = p % to;
- buf[k--] = Scale[j];
- l++;
- p = p / to;
- if (p == 0) {
- break;
- }
- }
- j = 0;
- k++;
- while(1)
- {
- buf[j++] = buf[k++];
- if (k == 100) {
- break;
- }
- }
- buf=(char *) realloc(buf,(l+1));
- return buf;
- }
Advertisement
Add Comment
Please, Sign In to add comment