
Другие языки программирования и технологии
Помогите исправить программу
напишите программу вывода всех х-значных десятичных чисел (х≤10), сумма цифр которых, равна целому числу Р. Число Р вводится с клавиатуры. #include "stdafx.h" #include<locale> int _tmain(int argc, _TCHAR* argv[]) {setlocale(LC_ALL,"Russian"); int x,p; float sum; puts("Введите количество знаков в числе:"); scanf("%d",&x); puts("Введите число P"); scanf("%d",&p); long int a,b,i,j,t; if ((x>0)&&(x<11)&&(p>0)&&(p<91)) { switch(x) { case 1: {a=1; b=9;} break; case 2: {a=10; b=99;} break; case 3: {a=100; b=999;} break; case 4: {a=1000; b=9999;} break; case 5: {a=10000; b=99999;} break; case 6: {a=100000; b=999999;} break; case 7: {a=1000000; b=9999999;} break; case 8: {a=10000000; b=99999999;} break; case 9: {a=100000000; b=999999999;} break; case 10: {a=1000000000; b=9999999999;} break; } for (i=a;i<=b;i++) {sum=0; t=i; while (t>0) {sum=sum+t; t=t/10; } if (sum==p) printf("%ld\n",i); } } else puts("Данные введены некорректно!"); return 0; } Фото на случай если не отобрзится часть программы
частично работает. в частности границы "90"

// Visual C++ 2010 console application
#include <iostream>
#include <conio.h>
#include <locale>
using namespace std;
void main()
{
do
{
setlocale(LC_CTYPE, "Russian_Russia.1251");
int x, p, sum, m = -1;
cout << endl << " Введите количество знаков в числе: ";
cin >> x;
cout << endl << " Введите число P: ";
cin >> p;
cout << endl;
long long a, b, n, t;
if ((x > 0) && (x < 11) && (p > 0) && (p <= 9 * x))
{
b = pow(10., x) - 1;
a = pow(10., x - 1);
for (n = a; n <= b; n++)
{
sum = 0;
t = n;
while (t > 0)
{
sum += t % 10;
t /= 10;
}
if (sum == p)
{
m++;
if (m == 10)
{
cout << endl;
m = 0;
}
cout << " " << n << " ";
}
}
}
else cout << endl << " Данные введены некорректно! ";
_getch();
system("cls");
}
while (true);
}
Однако, у этой программы есть существенный недостаток. Если ввести X = 10 и P = 90, то можно уснуть и не дождаться пока на экране будет выведен результат, поскольку, программа будет последовательно проверять все числа начиная с 1000000000 и пока не дойдёт до 9999999999.
Поэтому требуется оптимизация быстродействия.
И ещё, по умолчанию, буфер консоли может содержать 300 строк, поэтому все результаты в отведённый размер могут и не уместиться. В этом случае будут показаны только последние 300 строк.
#include <iostream>
#include <conio.h>
#include <locale>
using namespace std;
void main()
{
do
{
setlocale(LC_CTYPE, "Russian_Russia.1251");
int x, p, sum, m = -1;
cout << endl << " Введите количество знаков в числе: ";
cin >> x;
cout << endl << " Введите число P: ";
cin >> p;
cout << endl;
long long a, b, n, t;
if ((x > 0) && (x < 11) && (p > 0) && (p <= 9 * x))
{
b = pow(10., x) - 1;
a = pow(10., x - 1);
for (n = a; n <= b; n++)
{
sum = 0;
t = n;
while (t > 0)
{
sum += t % 10;
t /= 10;
}
if (sum == p)
{
m++;
if (m == 10)
{
cout << endl;
m = 0;
}
cout << " " << n << " ";
}
}
}
else cout << endl << " Данные введены некорректно! ";
_getch();
system("cls");
}
while (true);
}
Однако, у этой программы есть существенный недостаток. Если ввести X = 10 и P = 90, то можно уснуть и не дождаться пока на экране будет выведен результат, поскольку, программа будет последовательно проверять все числа начиная с 1000000000 и пока не дойдёт до 9999999999.
Поэтому требуется оптимизация быстродействия.
И ещё, по умолчанию, буфер консоли может содержать 300 строк, поэтому все результаты в отведённый размер могут и не уместиться. В этом случае будут показаны только последние 300 строк.
При каких условиях-то не работает? Что за границы 90? Какое число проверяется в сумме?
Александр Толпекин
ой все извиняюсь %) ступила что в 4х значном быть такого не может
а по-моему все работает,
только поправить
if ((x>0)&&(x<11)&&(p>0)&&(p<91))
на
if ((x>0)&&(x<11)&&(p>0)&&(p<=9*9))
или лучше проверять P на максимальное допустимое значение при заданной разрядности, типа такого:
long a,b,c,i,j,t;
...
switch (x)
{
case 1: {a=1; b=9; c=9; break;}
case 2: {a=11; b=99; c=9*2; break; }
...
case 9: {a=111111111; b=999999999; c=9*9; break;}
}
if (p > c) puts("Данные введены некорректно! ");
только поправить
if ((x>0)&&(x<11)&&(p>0)&&(p<91))
на
if ((x>0)&&(x<11)&&(p>0)&&(p<=9*9))
или лучше проверять P на максимальное допустимое значение при заданной разрядности, типа такого:
long a,b,c,i,j,t;
...
switch (x)
{
case 1: {a=1; b=9; c=9; break;}
case 2: {a=11; b=99; c=9*2; break; }
...
case 9: {a=111111111; b=999999999; c=9*9; break;}
}
if (p > c) puts("Данные введены некорректно! ");
Чаво?))
Я хз
Похожие вопросы
- Помогите исправить программу на pascal!
- Помогите исправить программу паскале(ввести номер месяца и вывести название времени года)
- Помогите исправить программу С++
- Помогите исправить ошибку в программе (c++).
- Помогите исправить ошибку в коде программы, пожалуйста!
- Помогите исправить ошибку в программе на Си
- Помогите исправить ошибку в коде программы на паскале.
- я плохо знаю с++ помогите пожалуйста исправить программу
- Пожалуйста, помогите исправить ошибки в программах на С++!
- нужно исправить программу