Определите цифры в данном номере.
Я новичок в программировании, и я застрял в проблеме. Я хочу, чтобы моя программа идентифицировала отдельные цифры в данном номере, как если бы я вводил 4692
, он должен идентифицировать цифры и распечатать 4 6 9 2
, И да, без использования массивов.
7 ответов
Идеальная проблема рекурсии для решения, если вы новичок в программировании...
4692/1000 = 4
4692% 1000 = 692
692/100 = 6
692% 100 = 92
92/10 = 9
92% 10 = 2
Вы должны получить представление о цикле, который вы должны использовать сейчас, чтобы он работал для любого числа.:)
Не написали C-код в год, но это должно сработать.
int i = 12345;
while( i > 0 ){
int nextVal = i % 10;
printf( "%d", nextVal );
i = i / 10;
}
Просто и красиво
void PrintDigits(const long n)
{
int m = -1;
int i = 1;
while(true)
{
m = (n%(10*i))/i;
i*= 10;
cout << m << endl;
if (0 == n/i)
break;
}
}
Другой подход состоит в том, чтобы иметь две петли.
1) Первый цикл: обратный номер.
int j = 0;
while( i ) {
j *= 10;
j += i % 10;
i /= 10;
}
2) Второй цикл: печатать числа справа налево.
while( j ) {
std::cout << j % 10 << ' ';
j /= 10;
}
Предполагается, что вы хотите, чтобы цифры печатались справа налево. Я заметил, что есть несколько решений, которые не имеют этого предположения. Если нет, то достаточно второго цикла.
Вот простое решение, если вы хотите просто напечатать цифры из числа.
#include <stdio.h>
/**
printdigits
*/
void printDigits(int num) {
char buff[128] = "";
sprintf(buff, "%d ", num);
int i = 0;
while (buff[i] != '\0') {
printf("%c ", buff[i]);
i++;
}
printf("\n");
}
/*
main function
*/
int main(int argc, char** argv) {
int digits = 4321;
printDigits(digits);
return 0;
}
Я думаю, что идея состоит в том, чтобы печатать неповторяющиеся цифры (иначе это было бы слишком просто)... ну, вы можете отслеживать уже напечатанные целые числа, не имея массива, кодирующего их в другое целое число.
немного псевдо C, чтобы дать вам подсказку:
int encoding = 0;
int d;
while (keep_looking()) {
d = get_digit();
if (encoding/(2**d)%2 == 0) {
print(d);
encoding += 2**d;
}
}
Это правильно
int main()
{
int number;
cin>>number;
int nod=0;
int same=number;
while(same){
same/=10;
nod++;
}
while(nod--){
cout<<(int)number/(int)pow10(nod)%10<<"\t";
}
return 0;
}