大数处理的方法

来源:互联网 发布:手机怎么收藏淘宝店铺 编辑:程序博客网 时间:2024/06/05 03:33

关于使用数组来存大数的一些技巧。
下边以a的32次幂来举个栗子。

#include <bits/stdc++.h>using namespace std;int a[100000];int main(){   int t, n, i, j, k, cas = 1;   scanf("%d", &t);   while(t--)   {        scanf("%d", &n);        memset(a, 0, sizeof(a));        int top = 0;        a[top++] = 1;        int x, y, c;        for(i = 0; i < n; i++) // 32的多少次幂        {            c = 0; //进位数            for(j = 0; j < top; j++)            {                x = a[j] * 32 + c; //计算当前位的乘积;                y = x % 10000; //计算后的值通过取模10000得到;                c = x / 10000;//得到进位数;                a[j] = y;            }            if(c)            {                a[top++] = c;            }        }        printf("Case #%d: ", cas++);        for(k = top - 1; k >= 0; k--)        {            if(k != top - 1)            printf("%04d", a[k]); //要进行补0, 比如10000 % 10000,你应该存进去的是0000, 而你存进去的只有0;            else printf("%d", a[k]);        }        printf("\n");   }   return 0;}

我这里用每个数组存的只有4位,其实你也可以存5位,存6位,只要把对应的10000改为100000,1000000即可,补零时改为%05d,%06d.

原创粉丝点击