| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 420 人关注过本帖
标题:请教个简单的问题,有点不明白。
只看楼主 加入收藏
mxj987
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2009-7-14
结帖率:100%
收藏
已结贴  问题点数:5 回复次数:7 
请教个简单的问题,有点不明白。
我是新手 自己编了个小程序,有点问题请教
给一个不多于5位的正整数,要求:1,求出它是几位数。2,分别打印出每一位数字。3,按逆序打印个位数字。
我是这样编写的:
main()
{
 int ge,shi,bai,qian,wan,place;
 long num;
 scanf("%ld",&num);
 if (num<=9999)
  {if (num<=999)
   {if (num<=99)
    {if (num<=9)
     place=1;
    else place=2;}
   else place=3;}
  else place=4;}
 else place=5;
 wan=(int)(num/10000);
 qian=(int)((num-wan*10000)/1000);
 bai=(int)((num-wan*10000-qian*1000)/100);
 shi=(int)((num-wan*10000-qian*1000-bai*100)/10);
 ge=(int)(num-wan*10000-qian*1000-bai*100-shi*10);
 printf("%d\n",place);
 printf("%ld\n",num);
 printf("%d%d%d%d%d\n",ge,shi,bai,qian,wan);
}
这个是错误的,当5位数大于32767时打印结果就不对打印出很多的数字。后来让我改成:
main()
{
 int ge,shi,bai,qian,wan,place;
 long num;
 scanf("%ld",&num);
 if (num<=9999)
  {if (num<=999)
   {if (num<=99)
    {if (num<=9)
     place=1;
    else place=2;}
   else place=3;}
  else place=4;}
 else place=5;
 wan=(int)(num/10000);
 qian=(int)(num-wan*10000)/1000;
 bai=(int)(num-wan*10000-qian*1000)/100;
 shi=(int)(num-wan*10000-qian*1000-bai*100)/10;
 ge=(int)(num-wan*10000-qian*1000-bai*100-shi*10);
 printf("%d\n",place);
 printf("%ld\n",num);
 printf("%d%d%d%d%d\n",ge,shi,bai,qian,wan);
}
这样就对了。但是我不知道为什么不对?
 wan=(int)(num/10000);
 qian=(int)((num-wan*10000)/1000);
 bai=(int)((num-wan*10000-qian*1000)/100);
 shi=(int)((num-wan*10000-qian*1000-bai*100)/10);
 ge=(int)(num-wan*10000-qian*1000-bai*100-shi*10);

wan=(int)(num/10000);
 qian=(int)(num-wan*10000)/1000;
 bai=(int)(num-wan*10000-qian*1000)/100;
 shi=(int)(num-wan*10000-qian*1000-bai*100)/10;
 ge=(int)(num-wan*10000-qian*1000-bai*100-shi*10);
效果不是一样的吗
还有个问题:(int)(num-wan*10000)/1000; 假如wan*10000超过了32767,wan是int型,这个结果是怎么转换的
谢谢各位啦 小弟有点笨想学习学习 帮个忙吧
2009-07-25 08:37
NoSoul
Rank: 9Rank: 9Rank: 9
来 自:沈阳化工大学
等 级:蜘蛛侠
帖 子:283
专家分:1010
注 册:2009-6-6
收藏
得分:0 
用__int64吧

我想伸手拉近點,竟觸不到那邊,就欠一點點,但這一點點...卻好遠
2009-07-25 08:58
dy_printf
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2009-7-25
收藏
得分:0 
也不明白``等大侠指点
2009-07-25 10:01
prankmoon
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:161
专家分:921
注 册:2009-7-21
收藏
得分:1 
下面的代码没有直接使用计算的方式给出,而是使用了C库函数,希望能够对你有用:
程序代码:
/**
*      file_name:
*    description:
*
*        version:      1.0
*        created:      11:23 2009-7-25
*       revision:      none 
*       compiler:      VC6.0
*
*         author:      prankmoon@*        company:
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAXLEN      5

int main()
{
    int i, length;
    int target;
    char str_int[MAXLEN + 1] = {0};
    
    /* input */
    printf("enter a positive number:\t");
    scanf("%d", &target);
    
    /* get what we want */
    sprintf(str_int, "%d", target);
    length = strlen(str_int);
    
    /* output */
    printf("%d\n", length);
    for (i=0; i<length; i++)
    {
        printf("%c ", str_int[i]);
    }
    printf("\n");
    for (i=0; i<length; i++)
    {
        printf("%c ", str_int[length - i - 1]);
    }
    
    printf("\n");
    return 0;
}

结果:
enter a positive number:        54321
5
5 4 3 2 1
1 2 3 4 5
2009-07-25 11:46
NoSoul
Rank: 9Rank: 9Rank: 9
来 自:沈阳化工大学
等 级:蜘蛛侠
帖 子:283
专家分:1010
注 册:2009-6-6
收藏
得分:1 
#include <stdio.h>
int main()
{
    int sum,num,a[6],i,count=0;
    scanf("%d",&sum);
    while(1){
        if(sum>99999){
            printf("shu ru cuo wu!\n");
            scanf("%d",&sum);
        }
        else{
            break;
        }
    }
    num=sum;
    while(sum!=0){
        a[i++]=sum%10;
        sum/=10;
        count++;
    }
    printf("%d\n%d\n",count,num);
    for(i=0;i<count;i++){
        printf("%d",a[i]);
    }
    printf("\n");
    return 0;
}

我想伸手拉近點,竟觸不到那邊,就欠一點點,但這一點點...卻好遠
2009-07-25 12:26
soler_z
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:28
专家分:130
注 册:2009-7-17
收藏
得分:1 
程序代码:
#include <stdio.h>
#define ARR_SIZE 5

int main()
{
    long num;
    int i,leap=1,temp,num_t;
    int a[ARR_SIZE]; //{units,tens,hun,tho,t_h}

    printf("pls input a five-digit number:\n");
    scanf("%ld",&num);
    num_t=num;
    for(i=0;i<ARR_SIZE;i++)
    {
        a[i]=num%10;
        num=num/10;
    }
    if(num_t<=99999)
    {
        for(i=4;i>=0&&leap;i--)
        if(a[i]!=0)
            { leap=0;
            printf("This is %d-digit number\n",i+1);
            temp=4-i;
            }
        for(i=4-temp;i>=0;i--)
            printf("%-3d",a[i]);
            printf("\n");
        for(i=0;i<=4-temp;i++)
            printf("%-3d",a[i]);
    }
    else printf("Error!pls input a five-digit number again! ");

return 0;
}


不知道是不是我把问题复杂化了,。。。还是勉强写出来了。。。
2009-07-25 14:03
ziyourufeng3
Rank: 1
等 级:新手上路
帖 子:5
专家分:5
注 册:2009-7-25
收藏
得分:0 
用long吧
2009-07-25 14:28
广陵绝唱
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:29
帖 子:3607
专家分:1709
注 册:2008-2-15
收藏
得分:2 
谨作参考:
程序代码:
#include<stdio.h>
#include<math.h>
#define N 6

int main(void)
{
    char str[N];
    long num;
    int i,j;

    while((scanf("%ld",&num))==1)//输入
    {
        i=0;
        num=abs(num);
        if(num==0)//当输入数字为 0 时,把数组赋值
        {
            i=1;
            str[0]=0;
        }
        while(num)
        {
            str[i++]=num%10;//拆解各位的数字存入数组中
            num/=10;
        }
        if(i>5)//当位数大于 5 位时,打印错误信息并重新输入
        {
            puts("error");
            continue;
        }
        printf("这个数是 %d 位数\n",i);
        for(j=0;j<i;++j)//顺序输出
        {
            printf("%3d",str[j]);
        }
        puts("");
        for(--j;j>=0;--j)//逆序输出
        {
            printf("%3d",str[j]);
        }
        puts("");
    }

    return 0;
}
2009-07-25 17:46
快速回复:请教个简单的问题,有点不明白。
数据加载中...
 
   



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

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