[HDU-5241] 大数乘法

来源:互联网 发布:好听的爱情句子知乎 编辑:程序博客网 时间:2024/06/01 08:36

找规律。。当时写出了等于1的可能是32个,就感觉是一个规律题,可是值比较大,就用到了大数乘法,然后可以看一看模板。

#include <stdio.h>#include <iostream>#include <vector>#include <math.h>#include <algorithm>#include <queue>#include <string.h>#include <set>#include <stack>#include <stdlib.h>using namespace std;struct Node{    int d[10009];    int len;    Node() {memset(d, 0, sizeof(d));}    Node(char *s)    {        memset(d, 0, sizeof(d));        int i = 0;        while(s[i] != '\0')        {            d[i] = s[i] - '0';            ++i;        }        len = i;        for(int i=0,j=len-1; i<j; i++,j--)            swap(d[i],d[j]);    }    Node operator * (const Node &t) const    {        Node ans;        for(int i=0;i<this->len;i++)        {            for(int j=0;j<t.len;j++)            {                ans.d[i+j] += this->d[i] * t.d[j];            }        }        for(int i=0;i<this->len+t.len;i++)        {            ans.d[i+1] += ans.d[i] / 10;            ans.d[i] %= 10;        }        int len = this->len+t.len;        while(len > 1 && ans.d[len-1] == 0)            len--;        ans.len = len;        return ans;    }};int main(){    int n;    int T;    cin >> T;    int case_ = 0;    while(T--)    {    cin >> n;    printf("Case #%d: ",++case_);    char s[20] = "32";    s[2] = 0;    Node a(s);    char s1[20] = "1";    s1[1] = 0;    Node ans(s1);    for(int i = 0; i < n; i++)        ans  = ans * a;    for(int i=ans.len-1; i>=0; i--)        printf("%d",ans.d[i]);    printf("\n");    }    return 0;}

0 0
原创粉丝点击