鱼C论坛

 找回密码
 立即注册
查看: 2139|回复: 4

[已解决]十进制转化二进制

[复制链接]
发表于 2018-2-6 03:16:27 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
老师让我们写个程序十进制转换二进制,要用到switch 和 case语句,我写了一个运行的很好,但总感觉太繁杂了。请问我这样写有办法化简不?
#include <iostream>
using namespace std;
void binaire(int n, int &n1,int &n2,int &n3,int &n4,int &n5,int &n6,int &n7,int &n8);

int main()
{
    int n;
    cout<<"n?";
    cin >> n;
    int n1,n2,n3,n4,n5,n6,n7,n8;
    binaire(n,n1,n2,n3,n4,n5,n6,n7,n8);
    cout<<n1<<n2<<n3<<n4<<n5<<n6<<n7<<n8<<endl;
}
void binaire(int n, int &n1,int &n2,int &n3,int &n4,int &n5,int &n6,int &n7,int &n8)
{
        switch (n%2)
        {
                case 1:
                        n8=1;
                        n/=2;
                        break;
                case 0:
                        n8=0;
                        n/=2;
                        break;
        }
        switch (n%2)
        {
                case 1:
                        n7=1;
                        n/=2;
                        break;
                case 0:
                        n7=0;
                        n/=2;
                        break;
        }
        switch (n%2)
        {
                case 1:
                        n6=1;
                        n/=2;
                        break;
                case 0:
                        n6=0;
                        n/=2;
                        break;
        }
        switch (n%2)
        {
                case 1:
                        n5=1;
                        n/=2;
                        break;
                case 0:
                        n5=0;
                        n/=2;
                        break;
        }
        switch (n%2)
        {
                case 1:
                        n4=1;
                        n/=2;
                        break;
                case 0:
                        n4=0;
                        n/=2;
                        break;
        }
        switch (n%2)
        {
                case 1:
                        n3=1;
                        n/=2;
                        break;
                case 0:
                        n3=0;
                        n/=2;
                        break;
        }
        switch (n%2)
        {
                case 1:
                        n2=1;
                        n/=2;
                        break;
                case 0:
                        n2=0;
                        n/=2;
                        break;
        }
        switch (n%2)
        {
                case 1:
                        n1=1;
                        n/=2;
                        break;
                case 0:
                        n1=0;
                        n/=2;
                        break;
        }
}
最佳答案
2018-2-6 14:30:35
好吧,改一下第一个,这次的确有使用switch case 哦,那位老师的本意应该是这个吧 ^_^

  1. #include <iostream>
  2. #include <string>

  3. std::string binaire(uint64_t val, uint8_t length)
  4. {
  5.         std::string bin;
  6.         uint64_t mask;

  7.         switch(length)
  8.         {
  9.         case sizeof(uint8_t):
  10.                 mask = 0x80;
  11.                 break;
  12.         case sizeof(uint16_t) :
  13.                 mask = 0x8000;
  14.                 break;
  15.         case sizeof(uint32_t) :
  16.                 mask = 0x80000000;
  17.                 break;
  18.         case sizeof(uint64_t) :
  19.                 mask = 0x8000000000000000;
  20.                 break;
  21.         default:
  22.                 throw "参数 length 错误!";
  23.         }


  24.         for( ; mask != 0; mask >>= 1)
  25.         {
  26.                 if(mask & val)
  27.                         bin.append("1");
  28.                 else
  29.                         bin.append("0");
  30.         }

  31.         return bin;
  32. }

  33. int main(void)
  34. {
  35.         uint8_t val8 = 100;
  36.         uint16_t val16 = 0xFF00;
  37.         uint32_t val32 = 0xAA55AA55;
  38.         uint64_t val64 = 0xAA55AA55FFFF0000;

  39.         std::cout << binaire(val8, sizeof(val8)) << std::endl;
  40.         std::cout << binaire(val16, sizeof(val16)) << std::endl;
  41.         std::cout << binaire(val32, sizeof(val32)) << std::endl;
  42.         std::cout << binaire(val64, sizeof(val64)) << std::endl;

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

使用道具 举报

发表于 2018-2-6 05:22:30 | 显示全部楼层
这是哪个老师出的题目?
用switch case 来进制转换?

我写了两个版本的,没有一个是用 switch case 的,因为我真的不知道该如何用 ^_^

  1. #include <iostream>
  2. #include <string>

  3. std::string binaire(uint32_t val)
  4. {
  5.         std::string bin;

  6.         for(uint32_t mask = 0x80000000; mask != 0; mask >>= 1)
  7.         {
  8.                 if(mask & val)
  9.                         bin.append("1");
  10.                 else
  11.                         bin.append("0");
  12.         }

  13.         return bin;
  14. }

  15. int main(void)
  16. {
  17.         std::cout << binaire(0xAA55AA55) << std::endl;
  18.         std::cout << binaire(100) << std::endl;                // 其实无论是十进制100,还是十六进制0xAA55AA55,都无所谓
  19.         return 0;
  20. }
复制代码

  1. #include <iostream>
  2. #include <string>

  3. void binaire(uint32_t val)
  4. {
  5.         std::string bin;

  6.         while(val)
  7.         {
  8.                 if(val % 2)
  9.                         bin.append("1");
  10.                 else
  11.                         bin.append("0");

  12.                 val /= 2;
  13.         }

  14.         for(auto r_iter = bin.rbegin(); r_iter != bin.rend(); ++r_iter)
  15.                 std::cout << *r_iter;
  16.         std::cout << std::endl;
  17. }

  18. int main(void)
  19. {
  20.         binaire(100);
  21.         return 0;
  22. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-2-6 05:30:16 | 显示全部楼层
第二个改一下吧

  1. #include <iostream>
  2. #include <string>

  3. std::string binaire(uint32_t val)
  4. {
  5.         std::string bin;

  6.         while(val)
  7.         {
  8.                 if(val % 2)
  9.                         bin.insert(bin.begin(), '1');
  10.                 else
  11.                         bin.insert(bin.begin(), '0');

  12.                 val /= 2;
  13.         }

  14.         return bin;
  15. }

  16. int main(void)
  17. {
  18.         std::cout << binaire(100) << std::endl;
  19.         return 0;
  20. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-2-6 14:30:35 | 显示全部楼层    本楼为最佳答案   
好吧,改一下第一个,这次的确有使用switch case 哦,那位老师的本意应该是这个吧 ^_^

  1. #include <iostream>
  2. #include <string>

  3. std::string binaire(uint64_t val, uint8_t length)
  4. {
  5.         std::string bin;
  6.         uint64_t mask;

  7.         switch(length)
  8.         {
  9.         case sizeof(uint8_t):
  10.                 mask = 0x80;
  11.                 break;
  12.         case sizeof(uint16_t) :
  13.                 mask = 0x8000;
  14.                 break;
  15.         case sizeof(uint32_t) :
  16.                 mask = 0x80000000;
  17.                 break;
  18.         case sizeof(uint64_t) :
  19.                 mask = 0x8000000000000000;
  20.                 break;
  21.         default:
  22.                 throw "参数 length 错误!";
  23.         }


  24.         for( ; mask != 0; mask >>= 1)
  25.         {
  26.                 if(mask & val)
  27.                         bin.append("1");
  28.                 else
  29.                         bin.append("0");
  30.         }

  31.         return bin;
  32. }

  33. int main(void)
  34. {
  35.         uint8_t val8 = 100;
  36.         uint16_t val16 = 0xFF00;
  37.         uint32_t val32 = 0xAA55AA55;
  38.         uint64_t val64 = 0xAA55AA55FFFF0000;

  39.         std::cout << binaire(val8, sizeof(val8)) << std::endl;
  40.         std::cout << binaire(val16, sizeof(val16)) << std::endl;
  41.         std::cout << binaire(val32, sizeof(val32)) << std::endl;
  42.         std::cout << binaire(val64, sizeof(val64)) << std::endl;

  43.         return 0;
  44. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-2-7 21:38:50 | 显示全部楼层
人造人 发表于 2018-2-6 14:30
好吧,改一下第一个,这次的确有使用switch case 哦,那位老师的本意应该是这个吧 ^_^

谢谢啦 就是这样的!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-26 23:48

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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