| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 506 人关注过本帖
标题:一道题 求更好的解决方法 小白问题
只看楼主 加入收藏
tt7721
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:60
专家分:107
注 册:2011-8-7
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:7 
一道题 求更好的解决方法 小白问题
题目:
给一个不多于五位的正整数,要求:
1 求出它是几位数
2 分别输出每一位数字
3按照逆序输出各位数字,例如原数为321,应该输出123

下面是我写的  可我觉得还得有简单的方法。目前我学完了 选择结构设计。就是if  和 switch 语句。就用我学过的 大家能帮我想个简单的方法吗?
我的代码中 a,b,c,d,e 分别为个位 十位 百位 千位 万位
           p,q,t 分别 多位数取出的余数 作为中间变量
           有 z 位数
程序代码:
#include <stdio.h>
#include <conio.h>
void main()
{
    int x,a,b,c,d,e,p,q,t,z;
    scanf("%d",&x);
    if (x<10)
    {
        z=1;
        a=x;
        printf("这是个%d位数\n",z);
        printf("个位%d\n",a);
        printf("逆序为%d\n",a);
    }
    else if (x<100)
    {
        z=2;
        a=x%10;
        b=x/10;
        printf("这是个%d位数\n",z);
        printf("十位%d,个位%d\n",b,a);
        printf("逆序为%d%d\n",a,b);
    }
    else if (x<1000)
    {
        z=3;
        c=x/100;
        p=x%100;
        a=p%10;
        b=p/10;
        printf("这是个%d位数\n",z);
        printf("百位%d,十位%d,个位%d\n",c,b,a);
        printf("逆序为%d%d%d\n",a,b,c);
    }
    else if (x<10000)
    {
        z=4;
        d=x/1000;
        q=x%1000;
        c=q/100;
        p=q%100;
        a=p%10;
        b=p/10;
        printf("这是个%d位数\n",z);
        printf("千位%d,百位%d,十位%d,个位%d\n",d,c,b,a);
        printf("逆序为%d%d%d%d\n",a,b,c,d);
    }
    else if (x<100000)
    {
        z=5;
        e=x/10000;
        t=x%10000;
        d=t/1000;
        q=t%1000;
        c=q/100;
        p=q%100;
        a=p%10;
        b=p/10;
        printf("这是个%d位数\n",z);
        printf("万位%d,千位%d,百位%d,十位%d,个位%d\n",e,d,c,b,a);
        printf("逆序为%d%d%d%d%d\n",a,b,c,d,e);
    }
    getch();
}

搜索更多相关主题的帖子: 设计 321 正整数 color 
2012-01-23 13:59
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:4 
程序代码:
#include<stdio.h>
#include<math.h>
int length(int a)
{
    return a ? log10(a) + 1 : 1;
}
int reverse(int a)
{
    int r;
    for(r = 0; a; a /= 10)
        r = r * 10 + a % 10;
    return r;
}
int main(void)
{
    int a;
    scanf("%d", &a);
    printf("a is %d\nlength of a is %d\nreverse a is %d\n", a, length(a), reverse(a));
    return 0;
}
只为让你借鉴其中的做法


重剑无锋,大巧不工
2012-01-23 14:16
tt7721
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:60
专家分:107
注 册:2011-8-7
收藏
得分:0 
回复 2楼 beyondyf
额。。我还没学到这个地方  现在调试课后题呢  晚上有空的话就开始学习循环控制。学完看看是否能看懂。如果看不懂 。还请大虾帮助理解呀。。。万分感谢。
2012-01-23 15:22
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
收藏
得分:4 
直接用字符串保存你的整数会更简单

                                         
===========深入<----------------->浅出============
2012-01-23 15:29
jliu14469
Rank: 1
等 级:新手上路
帖 子:1
专家分:4
注 册:2012-1-2
收藏
得分:4 
#include<stdio.h>
#include<stdlib.h>
int main(void)
{
    int num=0;   /*原来数字*/
    int fnum=0;  /*逆位数字*/
    int count=0; /*一共几位*/
    int end=0;   /*中间量*/
    int every=0; /*每位数字*/
    printf("请输入任意一个不多于五位的数字:\n");
    scanf("%d",&num);
    printf("原数是:%d\n",num);
    end=num;
    while(end)
         {
           fnum=fnum*10+end%10;
           every=end%10;
           if(end!=0)
             {printf("这个数的每一位是%d\n",every);}
           end=end/10;
           count++;
         }
    printf("逆位数是:%d,这是一个%d位数\n",fnum,count);
    system("pause");
}
2012-01-23 17:23
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:4 
回复 楼主 tt7721
純粹用if語句,的確還可以再簡練。你這種if懸掛的寫法,最好迴避,其實教科書上應該有說,這是一個編碼忌諱。再想一下,怎樣寫更清晰。提示一下,你至少有兩個改編的選擇(仍然只用if的)。

[ 本帖最后由 TonyDeng 于 2012-1-24 00:36 编辑 ]

授人以渔,不授人以鱼。
2012-01-24 00:32
回首依依
Rank: 7Rank: 7Rank: 7
来 自:苏州
等 级:黑侠
威 望:1
帖 子:193
专家分:524
注 册:2011-12-3
收藏
得分:4 
#include"stdio.h"
void Number_weishu(long);
void Number_shuzi(long);
void Number_nixu(long);
int main()
{
  long number;
  printf("Please input a number:\n");
  scanf("%ld",&number);
  Number_weishu(number);
  Number_shuzi(number);
  Number_nixu(number);
  
}
void Number_weishu(long a)
{
  int count=0;
  while(a)
  {
    a/=10;
    count ++;
  }
  printf("Wei shu is %d.\n",count);
  
}

void Number_nixu(long a)
{
  int num[10]={0},b,i=0,j;
  while(a)
  {
   b=a;
   a/=10;
   num[i++]=b-a*10;
  }
   printf("Ni xu number is:");  
   for(j=0;j<i;j++)
   printf("%2d",num[j]);
   printf("\n");
}

void Number_shuzi(long a)
{
  int num[10]={0},i=0,b;
  while(a)
  {
   b=a;
   a/=10;
   num[i++]=b-a*10;
  }
  printf("Each number is:");
  while(i)
  printf("%2d",num[--i]);
  printf("\n");
}
2012-01-24 10:22
tt7721
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:60
专家分:107
注 册:2011-8-7
收藏
得分:0 
谢谢大家  结贴 我自己在研究研究。
2012-01-24 12:28
快速回复:一道题 求更好的解决方法 小白问题
数据加载中...
 
   



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

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