| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1831 人关注过本帖
标题:请看看这个题目?
只看楼主 加入收藏
jay578010076
Rank: 1
等 级:新手上路
帖 子:4
专家分:3
注 册:2010-1-8
结帖率:0
收藏
已结贴  问题点数:20 回复次数:16 
请看看这个题目?
给出一个不多于5位的正整数,要求:
1、求出它是几位;
2、分别输出每一位数字;
3、按逆序输出每一位数字,例如123,输出321.


我自己是将输入得这个数(x)分别放在9999~9999、9999~999、999~99、99~9中比较,但是感觉这样做比较麻烦,程序要写很多,如果是10位数呢?请问有没有更好的办法?谢谢!
搜索更多相关主题的帖子: 321 正整数 
2010-01-15 19:49
jiangwu10057
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:1
帖 子:341
专家分:667
注 册:2009-3-25
收藏
得分:2 
搜索
2010-01-15 20:13
jay578010076
Rank: 1
等 级:新手上路
帖 子:4
专家分:3
注 册:2010-1-8
收藏
得分:0 
回复 2楼 jiangwu10057
能不能说明白点!我把我自己写的代码给你看看吧!
main()
{
  long int x,a,b,c,d,e;
  scanf("%ld",&x);
  if(x<=99999&&x>9999)
   {
    printf("shi 5 wei shu\n");
    a=x/10000;
    printf("%1d",a);
    b=x-a*10000;
    b=b/1000;
    printf(" %1d",b);
    c=x-a*10000-b*1000;
    c=c/100;
    printf(" %1d",c);
    d=x-a*10000-b*1000-c*100;
    d=d/10;
    printf(" %1d",d);
    e=x-a*10000-b*1000-c*100-d*10;
    printf(" %d\n",e);
    printf("%ld",(e*10000+d*1000+c*100+b*10+a));
   }
  if(x<=9999&&x>999)
   {
     printf("shi 4 wei shu\n");
     b=x/1000;
     printf("%1d",b);
     c=x-b*1000;
     c=c/100;
     printf(" %1d",c);
     d=x-b*1000-c*100;
     d=d/10;
     printf(" %1d",d);
     e=x-b*1000-c*100-d*10;
     printf(" %d\n",e);
     printf("%ld",(e*1000+d*100+c*10+b));
    }
   if(x<=999&&x>99)
    {
      printf("shi 3 wei shu\n");
      c=x/100;
      printf("%1d",c);
      d=x-c*100;
      d=d/10;
      printf(" %1d",d);
      e=x-c*100-d*10;
      printf(" %d\n",e);
      printf("%d",(e*100+d*10+c));
     }
    if(x<=99&&x>9)
     {
      printf("shi 2 wei shu\n");
      d=x/10;
      printf("%d",d);
      e=x-d*10;
      printf(" %d\n",e);
      printf("%d",(e*10+d));
     }
    if(x<=9&&x>0)
     {
      printf("shi 1 wei shu\n");
      printf("%d",e);
      printf("%d",e);

     }

  getch();
}
2010-01-15 20:20
孤独_浪子
Rank: 2
等 级:论坛游民
帖 子:52
专家分:60
注 册:2010-1-13
收藏
得分:2 
用while+switch,不过好像和if差不多。
这个题目是谭浩强的《C程序设计》上的吧?
2010-01-15 20:33
梁子
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:83
专家分:191
注 册:2009-9-20
收藏
得分:2 
在vc++6.0下运行无误,其中fun_2()的算法感觉效率有点低,你可以试着改一下,
另外,这道题你可以用字符串处理,应该更简单。
#include <stdio.h>
#include<math.h>
int fun_1(long int x);
void fun_2(long int x,int j);
void fun_3(long int x);
int main(void)
{
    long int x;
    int j;
    scanf("%ld",&x);
    j=fun_1(x);
    printf("该数字为%d位数\n",j);
    printf("正序分别输出每位数字:\n");
    fun_2(x,j-1);
    printf("\n倒序分别输出每位数字:\n");
    fun_3(x);
    return 0;
}
int fun_1(long int x)
{
    int j=0;
    while(x!=0)
    {
        x=x/10;
        j++;
    }
    return j;
}
void fun_2(long int x,int j)
{
    double a;
    long int b;
    a=pow(10,j);
    for(;j>=0;j--)
    {
        b=x/(long int)a;
        printf("%d   ",b);
        x=x%(long int)a;
        a=a/10;
    }

}
void fun_3(long int x)
{
    int i=1;
    while(x!=0)
    {
        i=x%10;
        printf("%d   ",i);
        x=x/10;
    }

}
2010-01-15 23:03
梁子
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:83
专家分:191
注 册:2009-9-20
收藏
得分:0 
用字符串处理:
#include <stdio.h>
#include<math.h>
#include<string.h>
int main(void)
{
    char x[5];
    int i=0,j=0;
    scanf("%s",x);
    j=strlen(x);
    printf("该数字为%d位数\n",j);
    printf("正序分别输出每位数字:\n");
    for(i=0;i<j;i++)
    {
        printf("%c  ",x[i]);
    }
    printf("\n倒序分别输出每位数字:\n");
    for(i=j-1;i>=0;i--)
    {
        printf("%c  ",x[i]);
    }
    return 0;
}
2010-01-15 23:09
jojpst007
Rank: 1
等 级:新手上路
帖 子:14
专家分:4
注 册:2009-10-29
收藏
得分:2 
新鲜出炉~~菜鸟写写
#include <stdio.h>
void main()
{
    long n;
    int w,q,b,s,g,p;//万,千,百,十,个
    printf("请输入一个不超过5位的整数:");
    scanf("%ld",&n);
    if(n>9999)
        p=5;
    else if(n>999)
        p=4;
    else if(n>99)
        p=3;
    else if(n>9)
        p=2;
    else
        p=1;
    printf("这个是%d位数\n",p);
    printf("每一位数字是:");
    w=n/10000;    //万位
    q=(n/1000)%10;//千位
    b=(n/100)%10; //百位
    s=(n/10)%10;  //十位
    g=n%10;       //个位
    switch(p)
    {
    case 5:
        printf("%d,%d,%d,%d,%d\n",w,q,b,s,g);
        printf("逆序输出:");
        printf("%d,%d,%d,%d,%d\n",g,s,b,q,w);
        break;
    case 4:
        printf("%d,%d,%d,%d\n",q,b,s,g);
        printf("逆序输出:");
        printf("%d,%d,%d,%d\n",g,s,b,q);
        break;
    case 3:
        printf("%d,%d,%d\n",b,s,g);
        printf("逆序输出:");
        printf("%d,%d,%d\n",g,s,b);
        break;
    case 2:
        printf("%d,%d\n",s,g);
        printf("逆序输出:");
        printf("%d,%d\n",g,s);
    case 1:
        printf("%d\n",g);// - -||真多余,为了配合你的要求~
        printf("逆序输出:");
        printf("%d\n",g);
        break;
    }
}
2010-01-15 23:27
dancing1wolv
Rank: 2
来 自:中国
等 级:论坛游民
帖 子:36
专家分:78
注 册:2009-12-25
收藏
得分:2 
咱也来个:
程序代码:
#include<stdio.h>
main()
{
    int m,n,y,i=0;
    scanf("%d",&y);
    do
    {
        m=y%10;
        printf("%3d",m);
        y/=10;
        i++;
    }while(y);
    printf("输入的是%d位数\n",i);
}
只有逆序输出的功能,如我要我来正序输出,我会考虑赋值给数组,哈哈…
不过感觉楼上各位都写的不错了,5楼用了好多函数,这好像是C语言要求的模块性吧,很好
6楼用的字符串,不太容易想到(反正我是没想到),这种方法一个突出的优点就是可以输入好多位数,(比如5楼的要是输入一个二三十位的数,恐怕就无能为力了,而6楼就完全可以做得到,其他的都算是比较一般的做法吧,嘿嘿……

相信自己,每天进步一点点,C语言,you can do it 。
2010-01-16 00:26
jiangwu10057
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:1
帖 子:341
专家分:667
注 册:2009-3-25
收藏
得分:0 
这题要是在谭浩强书上应该没到数组,我顺便做做待会代码
2010-01-16 09:03
我菜119
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:938
专家分:1756
注 册:2009-10-17
收藏
得分:2 
你为什么不把这个正整数看作是一个字符串呢?

愿用余生致力编程
2010-01-16 11:41
快速回复:请看看这个题目?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.099127 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved