Для цикла делить числа

Я любитель, когда дело доходит до C ++, но я уже получил задание, которое превышает мои знания.

Задача — ввести цифры n, m. Программа должна принимать это как интервал, в котором она проверяет, есть ли какое-либо число, которое является суммой чисел с тем же показателем.

EDIT: (18.10.15)
Оказывается, я не правильно понял свою задачу. Вот:

«Пользователь вводит два числа. Программа принимает его как интервал, в котором он проверяет все числа. Если в интервале есть число, сумма всех цифр которого в ОДНОМ ЭТОМ показателе равна этому числу, то программа показывает его».

Например, я ввожу 100 и 200. В этом интервале 153.
153 = 1 ^ 3 + 5 ^ 3 + 3 ^ 3 (1 + 125 + 27)
Программа показывает 153.

cin >> n;
cin >> m;
for (int i=n; i<=m; i++)
{
for (int k=n; k<=i; k++)
{
a = n % 10; //for example, I enter 153, then a=3
f = n /= 10; //f=15
b = f % 10;  //b=5
f = f /= 10; //f=1
c = f % 10; //c=1
f = f /= 10;
d = f % 10;

for (int j=1; j<=5; j++)
{
a = a * a;
b = b * b;
c = c * c;
d = d * d;
if (a + b + c + d == n)
{
cout << n << endl;
}
}
}
}

Любая помощь будет оценена.

3

Решение

Задача — ввести цифры n, m. Программа должна принимать это как интервал, в котором она проверяет, есть ли какое-либо число, которое является суммой чисел с тем же показателем.

Предполагая, что диапазон дается как [n, m)тогда вот ваша программа:

return (n != m);

Любое число можно рассматривать как сумму чисел с одинаковым показателем. Например:

0 = 0 ^ 3 + 0 ^ 3 + 0 ^ 3
1 = 1 ^ 3 + 0 ^ 3
2 = 1 ^ 3 + 1 ^ 3
3 = 1 ^ 3 + 1 ^ 3 + 1 ^ 3

и так далее. Это верно даже для отрицательных чисел.

Таким образом, в любом непустом диапазоне существует хотя бы 1 такое число.

1

Другие решения

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

    for (int i = n; i <= m; i++) {
...
int x = (int)Math.log10(i);
int rest = i;
for (int p = x; p>=0; p--) {
int digit = rest / (int)Math.pow(10,p);
rest = i % (int)Math.pow(10,p);

//3802 = 3*10^3 + 8*10^2 + 0*10^1 + 2*10^0
}
}

...

Извините, Java — это не C ++

0

Извините, что я так поздно отвечаю и плохо сформулировал вопрос — английский не мой родной язык.

Но оказывается, я не правильно понял свою задачу. Вот:

«Пользователь вводит два числа. Программа принимает его как интервал, в котором он проверяет все числа. Если в интервале есть число, сумма всех цифр которого в ОДНОМ ЭТОМ показателе равна этому числу, то программа показывает его».

Например, я ввожу 100 и 200. В этом интервале 153.
153 = 1 ^ 3 + 5 ^ 3 + 3 ^ 3 (1 + 125 + 27)
Программа показывает 153.

cin >> n;
cin >> m;
for (int i=n; i<=m; i++)
{
for (int k=n; k<=i; k++)
{
a = n % 10; //for example, I enter 153, then a=3
f = n /= 10; //f=15
b = f % 10;  //b=5
f = f /= 10; //f=1
c = f % 10; //c=1
f = f /= 10;
d = f % 10;

for (int j=1; j<=5; j++)
{
a = a * a;
b = b * b;
c = c * c;
d = d * d;
if (a + b + c + d == n)
{
cout << n << endl;
}
}
}
}
0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector