3024. 八进制小数

CatFlowers
T = int(input())
for i in range(T):
    s = input()[2:]
    print(f'case #{i}:')
    ans, weight = 0, 125  # ans是所求的非0部分, weight为权值
    for ii in s:  # 算出非零部分的值,和CPP版本的思路类似
        ans *= 1000  # 不过由于python的自带高精度,这里直接暴力用int求即可
        ans += int(ii) * weight
        weight *= 125
    a_s, zero = str(ans), ''
    # 例如:0.75 => s = 75 => ans = 7 * 125 * 1000 + 5 * 125 * 125
    # 但实际上真正的值应该是ans / 1000 / 1000
    # 所以我们不难得出结论:前导0的个数 = 原字符串s小数点后位数的长度 * 3 - ans的长度
    lenS, lenA = len(s) * 3, len(a_s)
    for ii in range(lenS - lenA):  # 根据上述结论,补0
        zero += '0'
    a_s = a_s.rstrip('0')  # 题目要求去除后置所有0
    print('0.' + zero + a_s)
CCXXXI_

直接zero = '0' * (lenS - lenA)会更pythonic

CatFlowers

Yep!

Master X

类似二进制转十进制做法,不过是除不是乘,从左到右遍历输出,记得转回字符。

Li Dao

这题有点套路,看了网上的题解才会做

include

using namespace std;
const int N=55;

char str[N];
char dest[N*5];

void solve()
{
cin>>str;
int ll=strlen(str);

int j,k=0;
for(int i=ll-1;i>1;i–)
{
int num=str[i]-‘0’;
for(j=0;j{
int T; cin>>T;
for(int step=0;step<T;step++)
{
printf(“case #%d:\n”,step);
solve();
}
return 0;
}

题解:http://blog.csdn.net/acdreamers/article/details/9037763

注意放十进制结果的数组要开大一些

Cuibaby

为啥这样第一个都过不了
char b[150];
sprintf(b,”%.150f”,sum);
int k=149;
while(b[k]==‘0’)

你当前正在回复 博客/题目
存在问题!