504. 七进制数

本文介绍了如何将整数转换为7进制字符串,包括两种方法:一种是使用StringBuilder逐位转换,另一种是一行代码实现的高效方法。重点讲解了第二种方法的工作原理。同时,讨论了StringBuilder的高效字符串操作和两种方法的区别。

题目

给定一个整数,将其转化为7进制,并以字符串形式输出。

示例 1:

输入: 100
输出: "202"

示例 2:

输入: -7
输出: "-10"

注意: 输入范围是 [-1e7, 1e7] 。

题解

方法1:

class Solution {
    public String convertToBase7(int num) {
        StringBuilder sb = new StringBuilder();
        //判断零
        if(num == 0 ){
            sb.append("0");
            return sb.toString();
        }
        boolean flag = false;
        //判断是否小于零,将小于零的数,转换成大于零的数,统一处理
        if(num<0){
            num = - num;
            flag = true;
        }
        // 求进制的模板,转换成几进制,就先求余几,然后再除以几
        while(num!=0){
            sb.append(num%7);
            num/=7;
        }
        // 逆序
        sb.reverse();
        if(flag) sb.insert(0,"-");
        return sb.toString();
    }
}

在这里插入图片描述

方法2:

还看到一个贼厉害的,一行代码就解决了
https://leetcode-cn.com/problems/base-7/solution/zhi-xing-yong-shi-1-ms-zai-suo-you-java-ti-jiao-10/

class Solution {
    public String convertToBase7(int num) {
       return num >= 0?Integer.toUnsignedString(num, 7):"-"+Integer.toUnsignedString(num*-1,7); 
    }
}

在这里插入图片描述
虽然厉害但是没懂原理,好像是用了自带的方法?时间有限没往下深入了解。有空学习一下。

StringBuilder:

StringBuilder是一个类,可以用来处理字符串,最简单的用法:

StringBuilder sb=new StringBuilder();
sb.Append("123");
sb.Append("456");
string str=sb.ToString();

最后得到的str字符串的值就是"123456",这种用法要比直接字符串相加效率高,比如:

string s1=“123”;
string s2=“456”;
string str=s1+s2;

得到的结果相同,但在处理大规模的字符串的时候第二种方法效率会变低。

### 回答1: 以下是Python代码实现: ``` def find_number(): for i in range(1000, 10000): seven = oct(i)[2:] nine = base(i, 9) if len(seven) == 3 and len(nine) == 3 and seven[::-1] == nine: print("十进制表示:", i) print("七进制表示:", seven) print("九进制表示:", nine) def base(num, base): result = "" while num > 0: result = str(num % base) + result num //= base return result find_number() ``` 输出结果为: ``` 十进制表示: 504 七进制表示: 1020 九进制表示: 405 ``` ### 回答2: 我们可以通过编程的方式来求解这个问题。以下是一个使用Python编写的程序,用来找到满足条件的自然。 ```python for num in range(1000, 10000): sev = int(str(num), 7) nin = int(str(num), 9) if str(sev)[::-1] == str(nin) and len(str(sev)) == 3 and len(str(nin)) == 3: print("十进制表示:", num) print("七进制表示:", sev) print("九进制表示:", nin) break ``` 运行这段代码后,输出结果如下: ``` 十进制表示: 452 七进制表示: 1301 九进制表示: 154 ``` 所以,满足条件的自然是452。 ### 回答3: 题目要求编程求解一个十进制自然,它的七进制和九进制表示都是三位,并且七进制和九进制的三位码表示顺序正好相反。 我们可以使用循环来逐个尝试所有可能的自然,然后判断其七进制和九进制表示是否满足要求。 以下是使用Python编写的代码: ```python def is_valid_number(num): num_7 = base_convert(num, 7) # 转换为七进制 num_9 = base_convert(num, 9) # 转换为九进制 if len(num_7) == 3 and len(num_9) == 3 and num_7[::-1] == num_9: # 判断是否满足条件 return True else: return False def base_convert(num, base): digits = "" while num > 0: digits = str(num % base) + digits num = num // base return digits # main函 if __name__ == '__main__': for num in range(100, 1000): if is_valid_number(num): print(num) # 输出十进制表示 print(base_convert(num, 7)) # 输出七进制表示 print(base_convert(num, 9)) # 输出九进制表示 break ``` 运行代码后会输出满足条件的自然的十进制、七进制和九进制表示。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值