鱼C论坛

 找回密码
 立即注册
查看: 1667|回复: 5

[已解决]求助C++作业

[复制链接]
发表于 2018-11-29 20:59:15 | 显示全部楼层 |阅读模式
5鱼币
1.题目内容:
对数字求特征值是常用的编码算法,奇偶特征是一种简单的特征值。对于一个整数,从个位开始对每一位数字编号,个位是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
二进制位值        32        16        8        4        2        1

你的程序要读入一个非负整数,整数的范围是[0,1000000],然后按照上述算法计算出表示奇偶性的那个二进制数字,输出它对应的十进制值。

提示:将整数从右向左分解,数位每次加1,而二进制值每次乘2。

输入格式:
一个非负整数,整数的范围是[0,1000000]。

输出格式:
一个整数,表示计算结果。

输入样例:
342315

输出样例:
13

最佳答案
2018-11-29 20:59:16
HJX54088 发表于 2018-11-30 15:29
嗯,那就麻烦解释一下除了main函数之外的其他部分吧,头文件勉强理解,其他的看的有点懵。

除了main其他都看不懂,你要我如何解释?
先打基础吧,如果你未来还有兴趣看这个程序的话,把这个程序留到未来吧

最佳答案

查看完整内容

除了main其他都看不懂,你要我如何解释? 先打基础吧,如果你未来还有兴趣看这个程序的话,把这个程序留到未来吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-11-29 20:59:16 | 显示全部楼层    本楼为最佳答案   
HJX54088 发表于 2018-11-30 15:29
嗯,那就麻烦解释一下除了main函数之外的其他部分吧,头文件勉强理解,其他的看的有点懵。

除了main其他都看不懂,你要我如何解释?
先打基础吧,如果你未来还有兴趣看这个程序的话,把这个程序留到未来吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-11-30 01:20:01 | 显示全部楼层
#include <iostream>
#include <string>
#include <sstream>
#include <cmath>

const std::string NumberToString(size_t num)
{
        std::stringstream ss;
        ss << num;
        std::string result;
        ss >> result;
        return result;
}

size_t StringToNumber(const std::string &s_num)
{
        std::stringstream ss;
        ss << s_num;
        size_t result;
        ss >> result;
        return result;
}

size_t BinaryToDecimal(const std::string &s_num)
{
        size_t result = 0;
        size_t num_size = s_num.size();
        for(auto iter = s_num.begin(); iter != s_num.end(); ++iter)
        {
                if(*iter == '1')
                {
                        result += pow(num_size - (iter - s_num.begin()) - 1, 2);
                }
        }
        return result;
}

size_t Fun(size_t num)
{
        if(num > 1000000)
                return -1;

        std::string s_num = NumberToString(num);
        size_t num_size = s_num.size();
        std::string result;
        for(auto iter = s_num.begin(); iter != s_num.end(); ++iter)
        {
                size_t n1 = num_size - (iter - s_num.begin());
                size_t n2 = StringToNumber({*iter});
                if(n1 % 2 == 0 ? (n2 % 2 == 0) : (n2 % 2 != 0))
                {
                        result += "1";
                }
                else
                {
                        result += "0";
                }
        }

        return BinaryToDecimal(result);
}

int main()
{
        size_t num;
        std::cin >> num;
        std::cout << Fun(num) << std::endl;

        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-11-30 12:48:05 | 显示全部楼层

首先感谢你给我的回复。其次是我刚刚学C++,有点看不懂前面的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-11-30 12:58:16 | 显示全部楼层
HJX54088 发表于 2018-11-30 12:48
首先感谢你给我的回复。其次是我刚刚学C++,有点看不懂前面的。

那看不懂?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-11-30 15:29:49 | 显示全部楼层

嗯,那就麻烦解释一下除了main函数之外的其他部分吧,头文件勉强理解,其他的看的有点懵。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-30 20:46

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表