我是编程新手,我遇到了一个问题。我希望我的程序识别给定数字中的单独数字,例如如果我输入4692
,它应该识别数字并打印4 6 9 2
。是的,不使用数组。
Farhan
问问题
6363 次
7 回答
26
如果您是编程新手,则可以解决一个完美的递归问题......
4692/1000 = 4
4692%1000 = 692
692/100 = 6
692%100 = 92
92/10 = 9
92%10 = 2
您应该了解现在应该使用的循环,以便它适用于任何数字。:)
于 2009-06-11T13:45:36.047 回答
1
一年没有写过 C 代码,但这应该可以。
int i = 12345;
while( i > 0 ){
int nextVal = i % 10;
printf( "%d", nextVal );
i = i / 10;
}
于 2009-06-12T00:01:04.897 回答
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;
}
}
于 2014-05-21T05:54:09.607 回答
1
另一种方法是有两个循环。
1)第一个循环:反转数字。
int j = 0;
while( i ) {
j *= 10;
j += i % 10;
i /= 10;
}
2)第二个循环:从右到左打印数字。
while( j ) {
std::cout << j % 10 << ' ';
j /= 10;
}
这是假设您希望从右到左打印数字。我注意到这里有几个解决方案没有这个假设。如果没有,那么只需第二个循环就足够了。
于 2018-10-18T15:13:07.043 回答
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;
}
于 2009-09-29T18:15:12.663 回答
0
我认为这个想法是打印非重复数字(否则它会太简单)......好吧,您可以跟踪已经打印的整数,而无需将数组编码为另一个整数。
一些伪C,给你一个线索:
int encoding = 0;
int d;
while (keep_looking()) {
d = get_digit();
if (encoding/(2**d)%2 == 0) {
print(d);
encoding += 2**d;
}
}
于 2009-09-29T18:38:12.307 回答
-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;
}
于 2014-06-02T17:20:30.470 回答