蓝桥杯 历届试题 矩阵翻硬币 数学思维+大数运算

先附上大佬博客Orz:https://blog.csdn.net/snailset/article/details/26752435

太久没刷题思维也跟不上了。。看了题解后自己又分析了一遍,如下图:

蓝桥杯 历届试题 矩阵翻硬币 数学思维+大数运算_第1张图片

接下来就是大数运算了,知道Java有现成的库,但我没学过Java啊QAQ...只能用C硬怼了。。之前曾经弄过,就是字符串操作,另外开方的时候注意有技巧,不能暴搜。。但我代码能力急剧下降,这么简单的问题debug了好久55555...主要坑点都在代码里了。。附上通过代码(又丑又长QAQ):

#include
#include
#include
#include
using namespace std;
const int INF=0x3f3f3f3f;

const int MAX=1005;
char a[MAX],b[MAX];
char sa[MAX/2],sb[MAX/2];
char c[MAX];
void Rev(char *s)
{
    int l=strlen(s);
    for(int i=0,j=l-1;i<=j;i++,j--)//注意j--!!
    {
        char tmp=s[i];
        s[i]=s[j];s[j]=tmp;
    }
}
void Mul(char a[],char b[],char c[])
{
    Rev(a);Rev(b);//逆序
    int la=strlen(a);
    int lb=strlen(b);
    int lc=la+lb;//c可能的最长位数
    int tmp[MAX];
    memset(tmp,0,sizeof(tmp));
    for(int i=0;i=10) //注意是">="10!!
        {
            tmp[i+1]+=(tmp[i]/10);//注意是"+="
            tmp[i]%=10;
        }
    }
    if(tmp[lc-1]==0)//最高位没有进位
        lc--;
    for(int i=0;i

 

你可能感兴趣的:(算法-数学)