| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2240 人关注过本帖
标题:新手求助,谢谢!编译通过,但只能输出0
只看楼主 加入收藏
x123698745
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2015-12-21
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:12 
新手求助,谢谢!编译通过,但只能输出0
#include<stdio.h>
int main()
{
    int a[1000000]={0},b[1000000]={0};
    int i=0, x, y, z, n=1, j=1,num=0;
    scanf("%d",&x);
    y=x;
    z=x;
    while (y>0)
    {
        n++;
        y=y/10;
    }
    for (i = 0;i < n;i++)
    {
        a[i] = z%10;
        z = z/10;
    }
    for (i = 0;i < n;i++)
    {
        if ((a[i] % 2)!= (i+1) % 2)
        b[i] = 1;
    }
    for (i = 0;i < n;i++)
    {
        num = num+(b[i] * j);
        j = j*2;
        i++;
    }
    printf("%d\n",num);
    return 0;
}



顺便说一下,这是一道数字特征题,谢谢各位大神的帮助!

[此贴子已经被作者于2015-12-21 21:31编辑过]

搜索更多相关主题的帖子: include 
2015-12-21 21:11
此论一出
Rank: 1
等 级:新手上路
帖 子:2
专家分:8
注 册:2015-12-22
收藏
得分:3 
不能给出原题吗?
还有最后一个for循环为什么i++了两次?是题目需要吗?
2015-12-22 21:42
x123698745
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2015-12-21
收藏
得分:0 
那个i++是写多了的,谢谢啊,原题在这

对数字求特征值是常用的编码算法,奇偶特征是一种简单的特征值。对于一个整数,从个位开始对每一位数字编号,个位是1号,十位是2号,以此类推。这个整数在第n位上的数字记作x,如果x和n的奇偶性相同,则记下一个1,否则记下一个0。按照整数的顺序把对应位的表示奇偶性的0和1都记录下来,就形成了一个二进制数字。比如,对于342315,这个二进制数字就是001101。
这里的计算可以用下面的表格来表示:
数字

数字             3   4   2   3   1   5
数位             6   5   4   3   2   1
数字奇偶     奇 偶 偶 奇 奇 奇
数字奇偶     偶 奇 偶 奇 偶 奇
奇偶一致     0   0   1   1   0   1

你的程序要读入一个非负整数,整数的范围是[0,1000000],然后按照上述算法计算出表示奇偶性的那个二进制数字,输出它对应的十进制值。
提示:将整数从右向左分解,数位每次加1,而二进制值每次乘2。
2015-12-23 13:43
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:3 
试试
程序代码:
#include<stdio.h>

int f(int a,int b)
{
    if((a&1)^(b&1)) return 0;else return 1;
}

int getint(int s,int *arr)
{
    static int t=0;
    if(s==0) return t;
    getint(s/10,arr);
    *(arr+t)=s %10;
    t++;
    return t;
}

int bin(int x)
{
    if(x==0) return 1;
    int t=1;
    for(;x>0;t*=2,x--);
    return t;
}

int main()
{
    int s[7]={0};
    int t=getint(342315,s);
    int res=0;
    int q=t-1;
    for(int i=0;i<t;i++,q--) res+=f(s[i],t-i)*bin(q);
    printf("最后转换后的十进制结果=%d\n",res);
    return 0;   
}



DO IT YOURSELF !
2015-12-23 14:44
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:3 
#include <stdio.h>

int main( void )
{
    const unsigned n = 342315;

    unsigned m = 0; // 结果
    unsigned d = 0; // 结果位数
    for( unsigned a=n,b=1; a!=0; a/=10,++d,b*=10 )
        m += ( (((a%10)^(d+1))&1) == 0 )*b;
    printf( "%0*.*u\n", d, d, m );

    return 0;
}
2015-12-24 15:20
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
回复 5楼 rjsp
神奇  有空我再研究一下  把拆分数字去数组这步给省了

DO IT YOURSELF !
2015-12-24 16:07
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
正常来说他是一个字符串
也可以是iNT类型   这完全取决于你自已

DO IT YOURSELF !
2015-12-24 17:01
码程小伙
Rank: 2
等 级:论坛游民
威 望:1
帖 子:27
专家分:81
注 册:2015-12-11
收藏
得分:3 
#include<stdio.h>
int f(int n);
int main()
{
    int n,res;
    scanf("%d",&n);
    res=f(n);
    printf("最后转换后的十进制结果=%d\n",res);
    return 0;
}
int f(int n)
{
    int m=0,i,a[7],j,s=1;
    for(i=1; n; i++)
    {
        a[i-1]=n%10;
        n=n/10;
        if(i%2==0&&a[i-1]%2==0||i%2!=0&&a[i-1]%2!=0)
        {
            for(j=i; j>1; j--)
                s=s*2;
        }
        else s=0;
        m+=s;
        s=1;
    }
    return m;
}
这样能达到目的吗
2015-12-24 22:45
x123698745
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2015-12-21
收藏
得分:0 
运行能通过,不过在函数里面调用自己是什么意思啊
2015-12-25 00:37
ms268el8
Rank: 4
等 级:业余侠客
威 望:1
帖 子:84
专家分:299
注 册:2015-11-30
收藏
得分:3 
回复 10楼 x123698745
就是遞迴呼叫
你當它是普通的函式呼叫函式就可以
2015-12-25 03:13
快速回复:新手求助,谢谢!编译通过,但只能输出0
数据加载中...
 
   



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

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