我是编程新手,我遇到了问题。我希望我的程序识别给定数字中的单独数字,就像我输入4692
一样,它应该识别数字并打印4 6 9 2
。是的,不使用数组。
答案 0 :(得分:26)
如果您不熟悉编程,则需要解决一个完美的递归问题...
4692/1000 = 4
4692%1000 = 692
692/100 = 6
692%100 = 92
92/10 = 9
92%10 = 2
你应该了解你现在应该使用的循环,以便它适用于任何数字。 :)
答案 1 :(得分:1)
年内没有编写C代码,但这应该可行。
int i = 12345;
while( i > 0 ){
int nextVal = i % 10;
printf( "%d", nextVal );
i = i / 10;
}
答案 2 :(得分:1)
简单又好看
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;
}
}
答案 3 :(得分:0)
如果您只想打印数字中的数字,这是一个简单的解决方案。
#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;
}
答案 4 :(得分:0)
我认为这个想法是打印非重新打印的数字(否则会太简单)......好吧,你可以跟踪已打印的整数,而不需要用另一个整数编码它们的数组。
一些伪C,给你一个线索:
int encoding = 0;
int d;
while (keep_looking()) {
d = get_digit();
if (encoding/(2**d)%2 == 0) {
print(d);
encoding += 2**d;
}
}
答案 5 :(得分:0)
另一种方法是有两个循环。
1)第一个循环:反转数字。
int j = 0;
while( i ) {
j *= 10;
j += i % 10;
i /= 10;
}
2)第二个循环:从右到左打印数字。
while( j ) {
std::cout << j % 10 << ' ';
j /= 10;
}
这是假设您要从右到左打印数字。我注意到这里有几种没有这种假设的解决方案。如果没有,那么仅第二个循环就足够了。
答案 6 :(得分:-1)
是否正确
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;
}