код на python:
a = int(input())
q = 0
we = 0
j = 0
if len(str(a)) == 1:
print(a)
else:
for i in range(10,a):
q = i
we = i
s = 0
while len(str(q)) != 1:
for e in range(len(str(q))):
p = int(str(q)[e])
we += p
s += p
q = s
s = 0
if we == a:
print(i)
j = 1
break
if j != 1:
print(-1)
код на c++:
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
int main()
{
int a;
int q;
int we;
int j;
int s;
int p;
j = 0;
string cv;
string asdf;
cin >> a;
cv = to_string(a);
if (cv.size() == 1)
{
cout << a;
}
else {
for (int i = 10; i < (a + 1); i++) {
q = i;
we = i;
s = 0;
asdf = to_string(i);
while (asdf.size() != 1)
{
for (int e = 0; e < asdf.size(); e++)
{
p = asdf[e];
we += p;
s += p;
}
q = s;
s = 0;
asdf = to_string(q);
}
if (we == a)
{
cout << i;
j = 1;
break;
}
}
}
if (j != 1)
{
cout << "-1";
}
return 0;
}
Помогите найти ошибку, пожалуйста, во втором коде цикл становится бесконечным, f а такого быть не должно, как это исправить?
Ну, если вы так хотите перебором - т.е. пролететь по времени на реально больших тестах вас не пугает - то вот ваш код:
#include <iostream>
using namespace std;
unsigned int sum(unsigned int n)
{
if (n < 10) return n;
unsigned int m = 0, s = n;
while(s)
{
m += s%10;
s /= 10;
}
return n + sum(m);
}
int main(int argc, const char * argv[])
{
unsigned int B;
cin >> B;
for(unsigned int a = 1; a <= B; ++a)
{
if (sum(a) == B)
{
cout << a << endl;
return 0;
}
}
cout << -1 << endl;
}
А вот если подумать о возможном диапазоне и изменить перебор - то вполне можно успеть, если заменить
for(unsigned int a = 1; a <= B; ++a)
на
for(unsigned int a = (B > 110) ? B-110 : 1 ; a <= B; ++a)
Перевод документов на английский язык: Важность и ключевые аспекты
Какие существуют виды рекламных бордов и как выбрать подходящий?
Есть приложение на Qt, и обычно располагается в Program FilesВ некоторых случаях, когда запускается программа, она запрашивает/не запрашивает права...