9.15 | 学习笔记

1.n进制小数转化为十进制小数

上大神代码,仅供记录(作者博客链接在下面,转载请注明出处),是目前看到的最棒的版本

#include<bits/stdc++.h>
using namespace std;
const int N=1005;
int t,i,j,k,n,tmp;
char str[N];
char dest[N];
void turn(char* str,int n)
{
    memset(dest,0,sizeof(dest));
    int len=strlen(str);
    for(i=len-1; i>1; i--)
    {
        int num=str[i]-'0';
        for(j=0;j<k||num!=0;j++)
        {
            tmp=10*num+(j<k?dest[j]-'0':0);
            dest[j]=tmp/n+'0';
            num=tmp%n;
        }
        k=j;
    }
    printf("0.%s
",dest);
}

int main()
{
    cin>>str>>n;
    turn(str,n);
    return 0;
}

这段代码转载自

https://blog.csdn.net/ACdreamers/article/details/9037763

2.昨天做过波兰表达式以后,今天靠着数据结构教程,终于把中缀表达式搞了出来,过程极其艰难,幸亏这题数据开放,完全是卡着点改代码......

两个重点思路:

1)利用栈的思想,按照优先级压入运算符,如果当前优先级低于栈顶,把栈顶输出,最后压入;

2)个人认为比较重要的一个坑,就是这个题目只涉及到了四种基本双目运算符,所以会出现减号还是负号的问题,

这里我的解决办法是检查得到的后缀表达式,如果符号是'-'且是表达式中第一个字符,或者它前面的前面不是数字而是运算符,说明这里是负号,

可以利用-a=0-a直接把0压入存数字的栈

原文地址:https://www.cnblogs.com/MissCold/p/11525171.html