7 条题解

  • 7
    @ 2022-8-20 22:32:24

    这里很简单的啦~我们来看看吧(结尾有彩蛋!)

    1. 这一道题可以用数组来做,首先存储一个数组 a ,并且将 n 设为 long long 形式
    2. 然后每一次都将 a[i] 的值设为 n % 8(最后一位数)
    3. 然后用 s 保存一共有几个数,最后倒叙输出即可~

    上代码吧!(AC通过~)

    #include <bits/stdc++.h>
    using namespace std;
    void eight(long long n)
    {
        int s = 0, a[1000];
        while (n > 0)
        {
            a[++s] = n % 8;
            n /= 8;
        }
        for (int i = s; i >= 1; i--) cout << a[i];
    }
    int main()
    {
        long long n;
        cin >> n;
        eight(n);
        return 0;
    }
    

    最后是进制数的小函数,请收下~(j 代表进制,并且这个函数不能用在 10进制以上!)

    void jinzhi(long long n, int j)
    {
        int s = 0, a[1000];
        while (n > 0)
        {
            a[++s] = n % j;
            n /= j;
        }
        for (int i = s; i >= 1; i--) cout << a[i];
    }
    
    • @ 2023-2-18 15:28:31

      给这位楼主补充一下,这个解法用到了数学知识“进制转化”。举例: 十进制:100转八进制 结果:100/8/8%8(百位)100/8%8(十)100%8(个位)

    • @ 2023-3-3 22:56:06

      @ ok

  • 4
    @ 2022-8-29 17:47:35

    难点主要在10进制转8进制上(虽然其实不难[doge][旺柴][doge])

    #include <bits/stdc++.h>
    using namespace std;
    int main()
    {
        unsigned long long n;
        int a[13];
        cin >> n;
        int i = 0;
        while (n > 0)
        {
            a[++i] = n % 8;
            n /= 8;
        }
        for (int j = i; j >= 1; j--)
        {
            cout << a[j];
        }
        return 0;
    }
    
    • 3
      @ 2022-8-23 21:23:23

      用函数解决即可。

      cin>>n;
      cout<<oct<<n;
      

      AC过,放心食用。

    • 1
      @ 2023-7-29 10:39:17

      很简单 首先在n>0时对n以8取余,记录余数,建议用数组; 再将余数倒序输出,为了知道有多少位,可以再取余时以变量记录; 上代码!(已AC,最重要的部分)

      #include <bits/stdc++.h>
      using namespace std;
      int main(){
          long long n;
          int x=0,a[50];
          cin>>n;
          while(n)a[++x]=n%8,n/=8;
          for(int i=x;i>=1;i--)cout<<a[i];
          return 0;
      }
      

      格式化版:

      #include <iostream>
      using namespace std;
      int main(){
          long long n;
          int x=0,a[50];
          cin>>n;
          while(n>0)
          {
              a[++x]=n%8;
              n/=8;
          }
          for(int i=x;i>=1;i--)
          {
              cout<<a[i];
          }
          return 0;
      }
      

      (小彩蛋:我用软件算了一下,a只要14个元素,所以开a[15]就可以了)

      • 0
        @ 2024-4-6 18:29:00
        //思路同上题,只需把2换成8即可~
        #include<iostream>
        using namespace std;
        long long n;//注意!!!
        int k,a[100005];
        int main(){
            cin>>n;
            while(n!=0){
                a[++k]=n%8;
                n/=8;
            }
            for(int i=k;i>=1;i--)
                cout<<a[i];
            return 0;
        }//编者:Royal
        
        • 0
          @ 2024-4-5 9:54:15
          #include <iostream>
          using namespace std;
          int main()
          {
              long long n;
              int cnt=0,a[15];
              cin >> n;
              while(n>0)
              {
                  a[++cnt]=n%8;
                  n/=8;
              }
              for (int i=cnt;i>0;i--)
              {
                  cout << a[i];
              }
              return 0;
          }
          
          • 0
            @ 2022-8-17 16:04:29

            如果你看了视频还不会我不知道你是什么情况

            数位拆分的时候把n%8保存到数组,然后倒着输出数组的元素即可。

            核心代码

            a[++cnt] = n % 8;
            n /= 8;
            
            for (int i = cnt; i >= 1; i--) cout << a[i];
            
            • 1

            【入门】正整数n转换为8进制

            信息

            ID
            285
            时间
            1000ms
            内存
            16MiB
            难度
            4
            标签
            递交数
            544
            已通过
            241
            上传者