Решите задачу написав при этом соответствующую программу
Найти количество двузначных чисел, которые не меняют свою сумму цифр при умножении числа на однозначное число n (n = 0 ... 9). входные данные Целое число n (0 ≤ n ≤ 9). Исходные данные Вывести искомое количество двузначных чисел. Желательно на С++ Я написал такой код но он не работает(когда я его запускаю мне на экран начинает выводиться бесконечное количество нулей)
int n,sum1,sum2,x;
cin >> n;
sum1 = 10;
sum2 = 10;
while(sum1<100)
{
sum1++;
sum2++;
sum1 = sum1 % 10;
x = sum1 * n;
sum2 = sum2 / 10;
sum1 = sum1 * n;
sum2 = sum2 * n;
if (sum1 +sum2 ==x)
cout << sum2*10;
else
{
cout << "нема таких чисел";
}
}
Ответы (2 шт):
sum1++;
sum1 = sum1 % 10;
вот этот код вам никогда и не даст достигнуть чего-то большего 9 :)
зачем вы вообще используете
while, когда для вашей задачи идеально подходитforfor (int value = 10; value < 100; value ++)ваш код как-то вообще не соответствует приведенному вами же условию задачи
в условии сказано - что есть некоторое число с некоторой суммой цифр
сумму цифр двухзначного числа value можно подсчитать так:
const sum1 = (value % 10) + ((value / 10) % 10);
а сумму произведения двухзначного числа value на n абсолютно также, только учитывая, что число все таки может быть трехзначным
const value2 = value * n;
const sum2 = (value2 % 10) + ((value2 / 10) % 10) + ((value2 / 100) % 10);
в добавок в задаче требуется подсчитать кол-во таких чисел, а не сами числа:
int count = 0; ... if (sum1 == sum2) count ++;
Так годится?
#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
if (n < 0 || n > 9) {
cerr << "Wrong input\n";
return 1;
}
int count = 0;
for (int i = 10; i <= 99; ++i) {
int sum1 = 0, sum2 = 0, k = i, j = i * n;
while (k || j) {
sum1 += k % 10;
sum2 += j % 10;
k /= 10;
j /= 10;
}
if (sum1 == sum2) {
cout << i << " and " << i* n << "\n";
count++;
}
}
cout << "There are " << count << " that numbers\n";
}