Chinaunix

标题: 大家帮帮忙. [打印本页]

作者: lvjida    时间: 2007-04-17 12:50
标题: 大家帮帮忙.
给一个不多于5位的正整数.要求:1.求出它是几位数;2.分别打印出每一位数字;3.按逆序输出各个数字.
  书上的一道习题,大家帮忙看看要怎么写,谢谢了.
作者: langue    时间: 2007-04-17 12:56
是几进制的?
作者: beepbug    时间: 2007-04-17 13:00
原帖由 langue 于 2007-4-17 12:56 发表
是几进制的?

这一问,把事儿复杂化了。
如果是100进制数,先要考虑好用哪100个符号来表示这100个基数?
作者: langue    时间: 2007-04-17 13:04
原帖由 beepbug 于 2007-4-17 13:00 发表

这一问,把事儿复杂化了。
如果是100进制数,先要考虑好用哪100个符号来表示这100个基数?


也是。不过我原先的想法是,如果采用 16 进制,那么问题的答案就非常清晰了。

.
作者: lvjida    时间: 2007-04-17 14:09
???????????
谁能帮我解答一下啊,谢谢
作者: converse    时间: 2007-04-17 14:23
不难
作者: Iamlangue    时间: 2007-04-17 14:39
  1. #include <stdio.h>
  2. #include <string.h>

  3. #define MAX_LEN 5
  4. #define THIS_NUM 1234

  5. int
  6. main()
  7. {
  8.     char n[MAX_LEN + 1] = {'\0'};
  9.     int a = THIS_NUM;

  10.     snprintf(n, MAX_LEN + 1, "%d", a);
  11.     printf("%d\n%s\n", strlen(n), n);
  12.     a = MAX_LEN;
  13.     while (a-->=0)
  14.         if (n[a]) printf("%c ", n[a]);
  15.     printf("%s\n", "");

  16.     return 0;
  17. }
复制代码

作者: cobras    时间: 2007-04-17 14:51
int main(void) {
    int n;
    int c;

    c = 0;
    for (n = 1234; n; n /= 10) {
          printf("%d: %d\n", c, n % 10);
          c++;
    }
    printf("total digits: %d\n", c);
    return 0;
}
作者: cobras    时间: 2007-04-17 14:53
int main(void) {
    int n;
    int c;

    c = 0;
    n = 1234;
    do {
          printf("%d: %d\n", c, n % 10);
          c++;
          n /= 10;
    }while (n);
    printf("total digits: %d\n", c);
    return 0;
}
作者: MMMIX    时间: 2007-04-17 15:21
原帖由 Iamlangue 于 2007-4-17 14:39 发表
[code]#include <stdio.h>
#include <string.h>

#define MAX_LEN 5
#define THIS_NUM 1234

int
main()
{
    char n[MAX_LEN + 1] = {'\0'};
    int a = THIS_NUM;

    snprintf(n,  ...

像这种习题类的问题提示下思路就可以了。
作者: lvjida    时间: 2007-04-17 16:24
原帖由 Iamlangue 于 2007-4-17 14:39 发表
[code]#include <stdio.h>
#include <string.h>

#define MAX_LEN 5
#define THIS_NUM 1234

int
main()
{
    char n[MAX_LEN + 1] = {'\0'};
    int a = THIS_NUM;

    snprintf(n,  ...


我用Microsoft Visual C++编译后发生错误.:
Compiling...
point.cpp
D:\Program Files\Microsoft Visual Studio\my projects1\point.cpp(13) : error C2065: 'snprintf' : undeclared identifier
执行 cl.exe 时出错.

point.obj - 1 error(s), 0 warning(s)

不过不知道错在哪.
作者: lvjida    时间: 2007-04-17 16:27
原帖由 cobras 于 2007-4-17 14:51 发表
int main(void) {
    int n;
    int c;

    c = 0;
    for (n = 1234; n; n /= 10) {
          printf("%d: %d\n", c, n % 10);
          c++;
    }
    printf("total digits: % ...

用Visual C++编译运行后的结果:
0:4
1:3
2:2
3:1
total digits:4
好象跟题目的要求不一致..
谢谢.
作者: lvjida    时间: 2007-04-17 19:47
大家帮帮忙看下啊
谢谢!
作者: zwylinux    时间: 2007-04-17 21:13
原帖由 lvjida 于 2007-4-17 12:50 发表
给一个不多于5位的正整数.要求:1.求出它是几位数;2.分别打印出每一位数字;3.按逆序输出各个数字.
  书上的一道习题,大家帮忙看看要怎么写,谢谢了.


一个很不具技巧性的思路

if (n > 9999 && n < 10000){
       /*print each number*/
}
else if (n > 999 && n < 1000){
       /*print each number*/
}
else if (n > 99 && n < 1000){
       /*print each number*/
}
else if (n > 9 && n < 100){
       /*print each number*/
}
else
       print n;
作者: MMMIX    时间: 2007-04-17 21:25
原帖由 zwylinux 于 2007-4-17 21:13 发表


一个很不具技巧性的思路

if (n > 9999 && n < 10000){
       /*print each number*/
}
else if (n > 999 && n < 1000){
       /*print each number*/
}
else if (n & ...

这也是一种思路,把所有的可能性都列出来。
作者: redhat008    时间: 2007-04-18 09:43
我提供一个吧:
十进制的。。
int func ( int num )
{
     bool sign = num < 0 ;
     if(sign) num = -num;
     int count = 0;
     if ( !num ) putchar('0');
     for( int j = 1; num /= j; j *= 10 ) {
          putchar( num % 10 + '0' );
          count ++ ;
     }
     if(sign) putchar('-');
}

[ 本帖最后由 redhat008 于 2007-4-18 14:49 编辑 ]
作者: lvjida    时间: 2007-04-18 20:54
原帖由 zwylinux 于 2007-4-17 21:13 发表


一个很不具技巧性的思路

if (n > 9999 && n < 10000){
       /*print each number*/
}
else if (n > 999 && n < 1000){
       /*print each number*/
}
else if (n & ...

谢谢.
作者: lvjida    时间: 2007-04-18 20:55
原帖由 redhat008 于 2007-4-18 09:43 发表
我提供一个吧:
十进制的。。
int func ( int num )
{
     bool sign = num < 0 ;
     if(sign) num = -num;
     int count = 0;
     if ( !num ) putchar('0');
     for( int j = 1; num /= j ...

我试了下,还是不行啊..出错了.
作者: MMMIX    时间: 2007-04-18 21:12
原帖由 lvjida 于 2007-4-18 20:55 发表
我试了下,还是不行啊..出错了.

出了问题自己先尽量解决,方法包括查书,试验,上网搜索等等。如果自己实在解决不了,或者你懒得自己解决从而希望别人帮你解决,在提问时也请附上出错信息以及其他一些必要信息,例如说编译/运行的报错信息,你所使用的编译器的种类/版本,和其他一些你觉得可能有帮助的信息,例如说你操作系统的种类和版本。如果程序的运行不符合你的期望,也请给出你期望的结果。这些信息都有助于别人更准确快速的对问题进行诊断,并最终帮你解决问题。

另外,如果你自己为了解决该问题已做了许多努力,请简要的列出,这样不但可以避免其他人再做同样的尝试,也可以显示你并非想不劳而获。

最后,别忘了在帖子的标题中准确恰当的描述你的问题。要知道,不论你在帖子中把问题描述的有多好,如果不能被别人看到,那这些对解决你的问题都没有什么帮助。
作者: yuanchengjun    时间: 2007-04-18 21:20
标题: 我很懒
char szNumber[6];
int len;

sprintf(szNumber, "%d",  n);
len = strlen(szNumber);

printf("%d\n", len );

for (int i = 0; i < len ; i ++)
{
  printf("%c\n", szNumber(i));
}
作者: lvjida    时间: 2007-04-18 22:18
原帖由 MMMIX 于 2007-4-18 21:12 发表

出了问题自己先尽量解决,方法包括查书,试验,上网搜索等等。如果自己实在解决不了,或者你懒得自己解决从而希望别人帮你解决,在提问时也请附上出错信息以及其他一些必要信息,例如说编译/运行的报错信息,你 ...

谢了 以后我会注意的.
作者: zhoujianxin    时间: 2007-04-19 09:40
大概就是这个意思了,乱写的。用引用会更好点。。懒得改了。^_^ 递规

#include <stdio.h>

int rprint(int seed ,int *n)
{
        if(seed<1)
                return -1;
        int dig = seed%10;

        printf("%d\n" , dig);
        int rt = (int)seed/10;
        (*n)++;
        rprint(rt , n);
}
int main(int argc ,char *argv)
{
        int seed = 543656;
        int n = 0;
        rprint(seed , &n);

        printf("total is %d\n" , n);
        return 0;
}




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2