鱼C论坛

 找回密码
 立即注册
查看: 2009|回复: 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其他都看不懂,你要我如何解释? 先打基础吧,如果你未来还有兴趣看这个程序的话,把这个程序留到未来吧
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

除了main其他都看不懂,你要我如何解释?
先打基础吧,如果你未来还有兴趣看这个程序的话,把这个程序留到未来吧
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

  5. const std::string NumberToString(size_t num)
  6. {
  7.         std::stringstream ss;
  8.         ss << num;
  9.         std::string result;
  10.         ss >> result;
  11.         return result;
  12. }

  13. size_t StringToNumber(const std::string &s_num)
  14. {
  15.         std::stringstream ss;
  16.         ss << s_num;
  17.         size_t result;
  18.         ss >> result;
  19.         return result;
  20. }

  21. size_t BinaryToDecimal(const std::string &s_num)
  22. {
  23.         size_t result = 0;
  24.         size_t num_size = s_num.size();
  25.         for(auto iter = s_num.begin(); iter != s_num.end(); ++iter)
  26.         {
  27.                 if(*iter == '1')
  28.                 {
  29.                         result += pow(num_size - (iter - s_num.begin()) - 1, 2);
  30.                 }
  31.         }
  32.         return result;
  33. }

  34. size_t Fun(size_t num)
  35. {
  36.         if(num > 1000000)
  37.                 return -1;

  38.         std::string s_num = NumberToString(num);
  39.         size_t num_size = s_num.size();
  40.         std::string result;
  41.         for(auto iter = s_num.begin(); iter != s_num.end(); ++iter)
  42.         {
  43.                 size_t n1 = num_size - (iter - s_num.begin());
  44.                 size_t n2 = StringToNumber({*iter});
  45.                 if(n1 % 2 == 0 ? (n2 % 2 == 0) : (n2 % 2 != 0))
  46.                 {
  47.                         result += "1";
  48.                 }
  49.                 else
  50.                 {
  51.                         result += "0";
  52.                 }
  53.         }

  54.         return BinaryToDecimal(result);
  55. }

  56. int main()
  57. {
  58.         size_t num;
  59.         std::cin >> num;
  60.         std::cout << Fun(num) << std::endl;

  61.         return 0;
  62. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

首先感谢你给我的回复。其次是我刚刚学C++,有点看不懂前面的。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

那看不懂?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

嗯,那就麻烦解释一下除了main函数之外的其他部分吧,头文件勉强理解,其他的看的有点懵。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-13 21:06

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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