| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 994 人关注过本帖
标题:哪里错了
只看楼主 加入收藏
liucs116
Rank: 2
等 级:论坛游民
帖 子:130
专家分:29
注 册:2009-11-4
结帖率:92.86%
收藏
已结贴  问题点数:5 回复次数:10 
哪里错了
问题描述

Sky从小喜欢奇特的东西,而且天生对数字特别敏感,一次偶然的机会,他发现了一个有趣的四位数 2992,这个数,它的十进制数表示,其四位数字之和为2+9+9+2=22,它的十六进制数BB0,其四位数字之和也为22,同时它的十二进制数表示 1894,其四位数字之和也为22,啊哈,真是巧啊。Sky非常喜欢这种四位数,由于他的发现,所以这里我们命名其为Sky数。但是要判断这样的数还是有点麻烦啊,那么现在请你帮忙来判断任何一个十进制的四位数,是不是Sky数吧。
 

输入

输入含有一些四位正整数,如果为0,则输入结束。

输出

若n为Sky数,则输出“#n is a Sky Number.”,否则输出“#n is not a Sky Number.”。每个结果占一行。注意:#n表示所读入的n值。

输入样例

2992
1234
0

输出样例

2992 is a Sky Number.
1234 is not a Sky Number.

代码如下:
#include<stdio.h>
int main()
{
    int b[4],c[4];
    int d,e,f,g,i,n,h;
    while(scanf("%d",&n)!=EOF)
    {
        if(n==0)
            break;
        h=n;
        d=e=f=g=0;
        d=n/1000+(n%1000/100)+(n%1000%100/10)+(n%1000%100%10/1);
        for(i=0;n!=0 && i<4;i++)
        {
            b[i]=n%16;
            n=n/16;
        }
        n=h;
        for(i=0;n!=0 && i<4;i++)
        {
            c[i]=n%12;
            n=n/12;
        }
        for(i=0;i<4;i++)
        {
            f+=b[i];
            g+=c[i];
        }
        if(d==f==g)
        {
            printf("%d is a Sky Number.\n",h);
        }
        else
        {
            printf("%d is not a Sky Number.\n",h);
        }
    }
    return 0;
}
搜索更多相关主题的帖子: 数字 东西 十六进制 二进制 十进制 
2009-11-06 21:10
タンポポ
Rank: 2
等 级:等待验证会员
帖 子:30
专家分:97
注 册:2009-11-6
收藏
得分:0 
#include<stdio.h>
int main()
{
    int b[4],c[4];
    int d,e,f,g,i,n,h;
    while(scanf("%d",&n)!=EOF)
    {
        if(n==0)
            break;
        h=n;
        d=e=f=g=0;
        d=n/1000+(n%1000/100)+(n%1000%100/10)+(n%1000%100%10/1);
        for(i=0;n!=0 && i<4;i++)
        {
            b[i]=n%16;
            n=n/16;
        }/*2992%16=0,2992/16=178;178%16=2,178/16=11;11%16=11,11/16=0;0%16=0,0/16=0*/
        n=h;
        for(i=0;n!=0 && i<4;i++)
        {
            c[i]=n%12;
            n=n/12;
        }
        for(i=0;i<4;i++)
        {
            f+=b[i];
            g+=c[i];
        }
        if(d==f==g)/*d==f&&f==g*/
        {
            printf("%d is a Sky Number.\n",h);
        }
        else
        {
            printf("%d is not a Sky Number.\n",h);
        }
    }
    return 0;
}
2009-11-06 21:43
玩出来的代码
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:河南新乡
等 级:贵宾
威 望:11
帖 子:742
专家分:2989
注 册:2009-10-12
收藏
得分:3 
#include<stdio.h>
 #include<conio.h>
int main()
{
    int b[4],c[4];
    int d,e,f,g,i,n,h;
    while(scanf("%d",&n)!=EOF)
    {
        if(n==0)
            break;
        h=n;
        d=e=f=g=0;
        d=n/1000+(n%1000/100)+(n%1000%100/10)+(n%1000%100%10/1);
        for(i=0;n!=0 && i<4;i++)
        {
            b[i]=n%16;
            n=n/16;
        }
        n=h;
        for(i=0;n!=0 && i<4;i++)
        {
            c[i]=n%12;
            n=n/12;
        }
        for(i=0;i<3;i++)              //2992转化成16进制后占3位,
        f+=b[i];
        for(i=0;i<4;i++)
        {

            g+=c[i];
        }  printf("%d ",f);getch();
        if(d==f&&d==g)
        {
            printf("%d is a Sky Number.\n",h);
        }
        else
        {
            printf("%d is not a Sky Number.\n",h);
        }
    }getch();
    return 0;
}


离恨恰如春草,更行更远还生。
2009-11-06 21:49
xuru1990
Rank: 2
等 级:论坛游民
帖 子:36
专家分:23
注 册:2009-10-28
收藏
得分:1 
  for(i=0;n!=0 && i<4;i++)
        {
            b[i]=n%16;
            n=n/16;
        }
b[]中的最后一个元素不是没有数值,系统给定任意值;他的累加和自然也不正确
2009-11-06 22:41
xuru1990
Rank: 2
等 级:论坛游民
帖 子:36
专家分:23
注 册:2009-10-28
收藏
得分:0 
这是在VC里的,你的 if(d==f==g)也不正确
2009-11-06 22:43
hsm8592
Rank: 2
等 级:论坛游民
帖 子:55
专家分:57
注 册:2009-11-6
收藏
得分:0 
能不能这样判断啊 我刚开始学c 不知道这样写有什么问题,请各位高手帮忙指点一下

 d=n/1000+(n%1000/100)+(n%1000%100/10)+(n%1000%100%10/1);
    if(d!=n/4096+(n%4096/256)+(n%4096%256/16)+(n%4096%256%16))
       {
            printf("%d is not a Sky Number.\n",h);
            break;
        }
      if(d==n/1728+(n%1728/144)+(n%1728%144/12)+(n%1728%144%12))
       {
            printf("%d is a Sky Number.\n",h);

        }
       else
        {
            printf("%d is not a Sky Number.\n",h);
         }


     
2009-11-07 09:58
hnliji1107
Rank: 4
等 级:业余侠客
帖 子:53
专家分:216
注 册:2009-10-23
收藏
得分:1 
#include "stdio.h"
int main(void)
{
    int b[10],c[10];
    int d,f,g,i,j,n,h,number;
    printf("input the number:");
    scanf("%d",&n);
    while(n<1000||n>9999)
    {
        printf("the data error,input again:");
        scanf("%d",&n);
    }
    while(n>=1000&&n<=9999)
    {
        number=h=n;
        f=g=0;
        d=n/1000+(n%1000/100)+(n%100/10)+(n%10);
        b[0]=n%16;
        i=1;
        f=b[0];
        while(b[i])
        {
            i++;
            n=n/16;
            b[i]=n%16;
            f+=b[i];
        }
        c[0]=h%12;
        j=1;
        g=c[0];
        while(c[j])
        {   
            j++;
            h=h/12;
            c[i]=h%12;
            g+=c[i];
        }
        if(d==f&&f==g)
            printf("%d is a Sky Number.\n",number);
        else
            printf("%d is not a Sky Number.\n",number);
        exit(0);
    }
    return 0;
}
图片附件: 游客没有浏览图片的权限,请 登录注册


2009-11-07 15:07
liucs116
Rank: 2
等 级:论坛游民
帖 子:130
专家分:29
注 册:2009-11-4
收藏
得分:0 
#include<stdio.h>
int main()
{
    int b[4],c[4];
    int d,f,g,i,n,h;
    while(scanf("%d",&n)!=EOF)
    {
        if(n==0)
        {
            break;
        }
        h=n;
        d=f=g=0;
        d=n/1000+(n%1000/100)+(n%1000%100/10)+(n%1000%100%10/1);
        for(i=0;n!=0 && i<4;i++)
        {
            b[i]=n%16;
            n=n/16;
        }
        n=h;
        for(i=0;n!=0 && i<4;i++)
        {
            c[i]=n%12;
            n=n/12;
        }
        for(i=0;i<3;i++)
            f+=b[i];
        for(i=0;i<4;i++)
        {
            g+=c[i];
        }
        if(d==f&&d==g)
        {
            printf("%d is a Sky Number.\n",h);
        }
        else
        {
            printf("%d is not a Sky Number.\n",h);
        }
    }
    return 0;
}

我这样交上去,为什么答案错误?

学无止境!
2009-11-07 18:04
liucs116
Rank: 2
等 级:论坛游民
帖 子:130
专家分:29
注 册:2009-11-4
收藏
得分:0 
不好意思我知道哪错了,数组长度短了。变成b[1000],c[1000]就对了

学无止境!
2009-11-07 18:50
parid
Rank: 2
等 级:论坛游民
帖 子:20
专家分:20
注 册:2009-4-26
收藏
得分:0 
#include<stdio.h>
main()
{
    int b[4]={0},c[4]={0};
    int d,f=0,g=0,i,n,h;
   
    scanf("%d",&n);
    while(n!=0)
    {
        h=n;
        d=n/1000+n%1000/100+n%100/10+n%10;//十位数相加
        while(n>0)
        {
            f=f+n%16;
            n=n/16;
        }
        n=h;
        while(n>0)
        {
            g=g+n%16;
            n=n/16;
        }
        if((d==f)&&(f==g))
        {
            printf("%d is a Sky Number.\n",h);
        }
        else
        {
            printf("%d is not a Sky Number.\n",h);
        }   
        scanf("%d",&n);
    }
    return 0;
}
2009-11-07 19:22
快速回复:哪里错了
数据加载中...
 
   



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

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