everyonecancalculus吧 关注:8贴子:269
  • 1回复贴,共1

数组计算器1.0(c)

只看楼主收藏回复

这个计算器它有个神奇的功能
就是突破变量的位数限制
在C语言中变量最大为2的31
次幂减1
然而 这个数只有九位
但是
我的计算器
嘿嘿
能算到50万位
不吹
50万位
3个小时左右的思考
但是计算器功能不算很完善
下一步的目标是
1亿位


1楼2016-03-19 11:48回复
    #include<stdio.h>
    #include<windows.h>
    #include<string.h>
    /*#include<malloc.h>
    int power (int x);
    int plus (int maxa,int maxb,int a[],int b[]);
    int subtract (int maxa,int maxb,int a[],int b[]);*/
    int multiply (int maxa,int maxb,int a[],int b[]);
    /*int devide (int maxa,int maxb,int a[],int b[]);*/
    void main()
    {
    int a[500000]={0};
    int *p;
    int ouu,i=0;
    printf("请输入想求2的多少次方\n");
    scanf("%d",&ouu);
    a[0]=1;
    int ou,maxa=0,maxb=0,maxaa=0,maxbb=0;
    for(ou=0;ou<ouu/*ouu*/;ou++)
    {
    maxa=multiplyed(maxa,a,2);
    printf("%d\n",maxa);
    }
    for(i=maxa;i>=0;--i)
    {
    printf("%d",a[i]);
    }
    printf("\n");
    system("pause");
    }
    /*int plus (int maxa,int maxb,int a[],int b[])
    {
    int t;
    int max;
    if(maxa>maxb){ max=maxa;}
    if(maxa<=maxb){ max=maxb;}
    for(t=0;t<=max;++t)
    {
    a[t]=a[t]+b[t];
    if(t=max && a[t]/10>=10)
    {
    maxa++;
    }
    if((a[t]/10)>=1)
    {
    a[t]=a[t]-10;
    a[t+1]=a[t+1]+1;
    }
    }
    return maxa;
    }
    int subtract (int maxa,int maxb,int a[],int b[])
    {
    int t;
    int max;
    if(maxa>maxb){ max=maxa;}
    if(maxa<=maxb){ max=maxb;}
    for(t=0;t<=max;++t)
    {
    a[t]=a[t]-b[t];
    /*if(t=max && a[t]<0)
    {
    subtract(maxb,maxa,b,a);
    }
    // 负数暂时不做处理
    if(a[t]<0)
    {
    a[t]=a[t]+10;
    a[t+1]=a[t+1]+1;
    }
    }
    return maxa;
    }*/
    //乘法暂时只做乘个位数的
    int multiplyed (int maxa,int a[],int b)
    {
    int x,t;
    for(t=0;t<=maxa;t++)
    {
    a[t]*=b;
    }
    for(t=0;t<=maxa;t++)
    {
    if(a[t]/10==1)
    {
    a[t]-=10;
    a[t+1]+=1;
    if(t==maxa){maxa+=1;return maxa;}
    }
    if(a[t]/10==2)
    {
    a[t]-=20;
    a[t+1]+=2;
    if(t==maxa){maxa+=1;return maxa;}
    }
    if(a[t]/10==3)
    {
    a[t]-=30;
    a[t+1]+=3;
    if(t==maxa){maxa+=1;return maxa;}
    }
    }
    return maxa;
    }
    /*int devide (int maxa,int a[],int b[])
    {
    }*/
    /*int power (int x)
    {
    int t,y=10;
    for(t=0;t<x;t++)
    {
    y*=10;
    }
    return y;
    }*/


    2楼2016-03-19 11:48
    回复