Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.11.2022, 23:18   #1
Daniil Orlov
Новичок
Джуниор
 
Регистрация: 18.09.2022
Сообщений: 3
По умолчанию Создать строку (длина равна k), которая представляет собой заданную последовательность

Создать строку (длина равна k), которая представляет собой заданную последовательность:
Последовательность 123456789101112131415…, в которой выписаны подряд все натуральные числа.

До 200 работает нормально, дальше нет

Код:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <string.h>
#include <clocale>
#include <math.h>
#define n 10000

int Count_Pos(int number) {
	int p = 1;
	while ((number / (int)pow(10, p)) > 0) p++; // Цикл с предусловием
	return p;
}

void String(int &k, char str[]) {
	int l, k1, m, j = 1;
	for (int i = 0; i < k; i++) {
		m = j; 
		k1 = Count_Pos(j);
		if (k1 > 1) { // Заход при j >= 10 (Count_Pos)
			while (Count_Pos(j) != 1) { // Запись числа по разрядам в массив
				l = j;
				j = j / (int)pow(10, Count_Pos(j) - 1);
				str[i] = j + 48;
				j = l;
				j = j % (int)pow(10, Count_Pos(j) - 1);
				i++;
			}
		}
		str[i] = j + 48; // Запись в строку каждой отдельной цифры
		j = m + 1;
	}
	str[k] = '\0'; // Добавление конца строки
}

int main() {
	setlocale(LC_ALL, "rus");
	int k; char str[n];
	while (true) {
		printf("Введите количество символов в строке, которое вам нужно: "); scanf_s("%d", &k);
		if (k <= 0) { printf("Ошибка! Введите корректное число!\n\n"); }
		else {
			String(k, str);
			printf("Итоговая последовательность: "); puts(str); printf("\n");
		}
	}
}
Daniil Orlov вне форума Ответить с цитированием
Старый 21.11.2022, 23:43   #2
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

А не лучше в функции задать массив, который будет содержать переведенное число, а в цикле присваивать следующему символу строки символ из массива
Код:
void String(int &k, char str[]) {
  char m[16]; // Для числа типа int 16 символов даже много
// u - счетчик чисел: 1 .. x
// j - индекс в массиве m
// i - индекс в строке str
  for (int i = 0, j = 16, u = 1; i < k; str[i++] = m[j++]) // Копируем в цикле символ из массива в строку
    if (j == 16) { // Счетчик достиг конца массива
      int q = u++; // q - Временная переменная для перевода числа в строку
      while (q > 0) {
        j--;
        m[j] = (q % 10) + 48; // Заполняем массив символами (цифрами) числа q в обратном порядке и обновляем позицию счетчика j
        q /= 10;
      }
    }
  str[k] = 0;
}
https://godbolt.org/z/1hc7rq8aq

Последний раз редактировалось macomics; 22.11.2022 в 00:19.
macomics вне форума Ответить с цитированием
Старый 22.11.2022, 12:54   #3
Cuprum5
Форумчанин
 
Регистрация: 09.05.2017
Сообщений: 736
По умолчанию

Код:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <string.h>
#include <clocale>
#include <math.h>
#define n 10000

int Count_Pos(int number)
{
	int p = 0;
	while(number)
    {
        p++;
        number /= 10;
    }
	return p;
}

void NString(int &k, char* ps)
{
	int kl, copy, uk=0;

	for(int i = 1; i <= k; i++)
    {
		copy = i;
		kl = Count_Pos(copy);
		uk += kl-1;
        while(copy)
        {
            ps[uk--] = (copy%10) + 0x30;
            copy /= 10;
        }
        uk += kl+1;
	}
	ps[uk] = '\0';  //Добавление конца строки
}

int main()
{
	setlocale(LC_ALL, "Rus");
	int k;
	char str[n] = {0};

	/*
	printf("Введите количество символов в строке, которое вам нужно: ");
    scanf("%d\n", &k);
    */
    k = 15;
	if(k <= 0)
    {
        printf("Ошибка! Введите корректное число!\n\n");
    }
	else
    {
		NString(k, str);
		printf("Итоговая последовательность: ");
        puts(str);
        printf("\n");
	}
	return 0;
}
Cuprum5 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[C++] Разработка системы управления документами (Document Management System, DMS) Система представляет собой клиент-серверное решение coldq Фриланс 8 24.11.2018 11:35
Что представляет собой эта функция jeziq PHP 1 16.03.2012 15:35
Что представляет собой эта функция jeziq PHP 1 16.03.2012 13:24
написать программу которая "сжимает" заданную последовательность Алиночка))) Фриланс 7 17.01.2010 18:35