Member 12760530 Ответов: 2

Как написать функцию swapdigits.


Напишите функцию: swapDigits(m,n,x) {}, которая имеет 3 неотрицательных целочисленных аргумента и должна возвращать число, полученное путем замены M-й и N-й цифр числа x. например, swapDigits (0,3,123456) возвращает 126453, 0-я цифра числа является его наименее значимой цифрой. или еще один "бывший". swapDigits(2,3,1234) возвращает 1324. Я не должен использовать строки или массивы. Это моя работа, но программа не работает, если m или n=0, если x=10a+b и для некоторых других чисел, таких как swapDigits(2,4,2412).

Что я уже пробовал:

int numberOfDigits(int x) {
	int count=0;
	while(x!=0){
		x/=10;
		count++;
	}
	return count;
}

int swapDigits(int m, int n, int x) {
	int tempa, tempb, temp, temp1,  temp2, a, b, c, g, d;
	temp=x;
	temp1=x;
	temp2=x;
	a= numberOfDigits(x) - m ;
	b= numberOfDigits(x) - n ;
	tempa=a;
	tempb=b;
	int mthDigit, nthDigit;
	while(tempa>=0){
		tempa--;
		temp1/=10;
		mthDigit=temp1%10;
	}
	while(tempb>=0){
		tempb--;
		temp2/=10;
		nthDigit=temp2%10;
	}

	d = (mthDigit*pow(10, a)) + (nthDigit*pow(10, b)) ;
	g = (nthDigit*pow(10, a)) + (mthDigit*pow(10, b)) ;

	return x - d + g;
}

[no name]

Похоже, самое подходящее время научиться запускать свой код с помощью отладчика и изучать переменные по мере его выполнения.

2 Ответов

Рейтинг:
2

OriginalGriff

Начните с размышления: что такое десятичная цифра? Как мне его удалить? Как мне его добавить?
Ну, к 3-й цифре этого числа: 654321 - это "4", и я бы удалил его, преобразовав 3 в степень десять: 1000.
Если я разделю базовое число на 1000 * 10, то получу 65. Если я умножу это на 1000 * 10, то получу 650000.
Если я возьму остаток от исходного числа и 1000, то получу 321.
Таким образом, сложение этих двух вместе удалило третью цифру:

removed = (x / 10000) * 10000 + (x % 1000)

Точно так же я могу очень легко извлечь цифру:
digit = (x / 1000) % 10


И просто изменив значение степени десяти, я могу сделать то же самое для первой цифры:
removed = (x / 10) * 10 + (x % 1)
digit = (x / 1) % 10


Итак... если вы напишете две функции, чтобы удалить цифру и вернуть заданную цифру x и все, что вам нужно сделать, это назвать каждую из них дважды, а затем умножить и сложить.

Есть ли в этом смысл?


Рейтинг:
1

Patrice T

Вы должны научиться использовать отладчик как можно скорее. Вместо того чтобы гадать, что делает ваш код, пришло время увидеть, как он выполняется, и убедиться, что он делает то, что вы ожидаете.

Отладчик позволяет вам следить за выполнением строка за строкой, проверять переменные, и вы увидите, что есть точка, в которой он перестает делать то, что вы ожидаете.
Отладчик-Википедия, свободная энциклопедия[^]
Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]

Отладчик здесь для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.
Когда код не делает того, что ожидается, вы близки к ошибке.