Я любитель, когда дело доходит до 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;
}
}
}
}
Любая помощь будет оценена.
Задача — ввести цифры 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 такое число.
«Все, что я знаю, это как заставить программу проверять каждый номер отдельно» «Программа не должна использовать массивы».
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 ++
Извините, что я так поздно отвечаю и плохо сформулировал вопрос — английский не мой родной язык.
Но оказывается, я не правильно понял свою задачу. Вот:
«Пользователь вводит два числа. Программа принимает его как интервал, в котором он проверяет все числа. Если в интервале есть число, сумма всех цифр которого в ОДНОМ ЭТОМ показателе равна этому числу, то программа показывает его».
Например, я ввожу 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;
}
}
}
}