1. Пользуйтесь тегами кода. - [code] ... [/code] 2. Точно указывайте язык, название и версию компилятора (интерпретатора). 3. Название темы должно быть информативным. В описании темы указываем язык!!!
Что именно тебе выдает и что ты хочешь получить? Получишь ты в sum1 сумму цифр числа, а в sum2 будет 0, потому как на момент захода во второй цикл n уже равно 0...
условие окончание цикла стоит просто n, что это означает?
В С/С++ цикл for продолжается до тех пор, пока условие окончания истинно. Истинно - это значит "не равно 0", потому что 0 - это false... Вот и получается, что цикл продолжается, пока n <> 0...
int sum1,sum2,n,i,vr; cin>>n; vr=n; //т.к. n будет превращаться в 0, сохраняю в др. переменную sum2=0; for(sum1=0; n; n/=10) sum1+=n%10; n=vr; for(i=0;i<=n;i++) if (n%i==0) for(sum2=0; i!=0; i/=10) {sum2+=i%10; if (sum1>sum2) cout<<vr; else if (sum1<sum2) cout<<i; else if ((sum1==sum2) && (n<i)) cout<<vr; else cout<<i;}
Я пытаюсь сделать вот что: 1) Нахожу сумму цифр(sum1) заданного числа(n). 2) Проверяю числа от 1 до заданного числа(i), и если встречается такое число, на которое заданное делится без остатка нахожу сумму его цифр. (sum2) 3) Сравниваю заданное число и найденное число(i) по криериям: 1. Если сумма цифр занного числа больше суммы цифр найденного, то вывожу заданное. 2. Если меньше - вывожу найденное. 3. Если суммы цифр чисел равны, а заданное меньше найденного, вывожу заданное. 4. иначе вывожу найденное. Мне всегда выдает -1073741676. Чего я тут намутил?
Скажи спасибо, что вообще не выбрасывает из IDE... Во-первых, ты не заканчиваешь цикл там, где надо (а для тог, чтобы это понять, надо форматировать текст как положено):
#include <iostream.h>
int main() {
int sum1,sum2,n,i,vr; cin>>n;
vr=n; sum2=0; for(sum1=0; n; n/=10) sum1+=n%10;
n=vr; for(i=0;i<=n;i++) if (n%i==0) for(sum2=0; i!=0; i/=10) { sum2+=i%10; } // <---Эта скобка у тебя была в другом месте
if (sum1>sum2) cout<<vr; else if (sum1<sum2) cout<<i; else if ((sum1==sum2) && (n<i)) cout<<vr; else cout<<i;
return 0; }
Но это все неважно, потому что при первой же итерации второго цикла (когда i = 0) ты делаешь:
#include <iostream> using namespace std; int main () { int sum1,sum2,n,i,vr; cin>>n;
vr=n; sum2=0; for(sum1=0; n; n/=10) sum1+=n%10;
n=vr; for(i=1;i<=n;i++) if (n%i==0) for(sum2=0; i!=0; i/=10){ //не пойму, если в цикле один оператор, зачем его заключать в sum2+=i%10;} //операторные скобки?
if (sum1>sum2) cout<<vr; else if (sum1<sum2) cout<<i; else if ((sum1==sum2) && (n<i)) cout<<vr; else cout<<i; return 0; }
На 0 Значит цикл нужно начинать с 1? теперь у меня зацикливание... +вот это сравнение мне, наверно, тоже надо делать в цикле, т.к. мне нужно выбрать число в цикле не первое, которое подойдет, а из всех от 1 до n по этим условиям...
#include <iostream> using namespace std; int main () { int sum1,sum2,n,i,vr,j,delit; cin>>n; vr=n; for(sum1=0; n; n/=10) sum1+=n%10;
n=vr; for (i=1;i<=n;i++) { if (n%i==0) for (sum2=0,j=i; j!=0; j/=10) { sum2+=i%10; } if (sum1>sum2) delit=vr; else if (sum1<sum2) delit=i; else if ((sum1==sum2) && (n<i)) delit=vr; else delit=i;} cout<<delit; return 0; }
Я предыдущий код написалне верно... Мне нужно, чтобы оно вывело наилучший делитель числа. Т.е. если ввожу 144, то мне выводит 9. Т.е. оно проверят все чсила от 1 до 144, находит сумму каждого числа и сравнивает ее с суммой числа 144(сумма 9), если сумма больше то сохраняет эту сумму в переменную delit и проверяет дальше, если меньше - просто проверяет дальше, если сумма равна, то сравнивает эти два числа и выбирает наименьшее, и опять же просматривает дальше, пока не просмотрит все числа.
Ты задание нормально русским языком напиши... Надоело уже играть в "испорченные телефоны". Что значит, "наилучший делитель", например, чем он ЛУЧШЕ чем 2 или 12?
Извиняюсь... Вот, смотри: Нужно найти наилучший делитель. Будем считать, что число a лучше числа b, если сумма цифр a больше суммы цифр b, а при равенстве суммы их цифр, если число a меньше числа b.
А почему 9 не делитель 144? 144/9=16 ==> Делимое/делитель=частное разве не так?