• 高精度库(支持小数、负数、整数、判断质数、阶乘、孪生质数等)


    吐槽

      丧心病狂的C语言课设……

      基本我写了全部后端代码,加加的前端代码还可以继续精简(先留坑)

      百度文库那些货色居然都好意思要¥30?真不要脸。加加也是不容易,在旁边不知干嘛的好,还让他破费了30……

      而且这快一千行的玩意让我画流程图?我用AutoFlowChart都生成了了43MB的BMP格式图片,手画那真的是谋杀……

      这是主函数流程图的缩略图……那么简单的原理,非要弄个那么难懂的流程图

    代码文档(雾)

      分为两个头文件,分别处理整数和小数

        整数

          数据存储方式——一个结构体,三个成员

            num——数字主体

            flag——正负号,大于等于零为1,小于零为-1(即0为+0)

            len——数字长度

          支持操作

            输入输出(input(),output())——能过滤或矫正一些非法输入,详见代码

            四则运算(plus(),sub(),mult(),divi())(除法可求余数)(本来乘法想套个FFT的,但ddl紧迫,先留坑啥时候再来填坑)

            比较大小(cmp())为了某些代码方便,功能为绝对值比较,用法见注释

            判断质数(is_prime())(很low的试除法,不止除到$sqrt{n}$,为了省事还一直跑到$n$)

            算阶乘(fac())(short型的阶乘都装不完吧,结果的上限是$10^{10^{5}}$,可以手改)

            求区间内孪生质数(twins_prime()),加了对输入小于等于零的特判。

            调试(debug()),输出结构体内部信息

        小数

          数据储存方式——定点小数,规定500位为个位,499位为0.1位,一个结构体4个成员

            num——数字主体,长度1000,500位为个位

            lena——整数部分长度

            lenb——小数部分长度     //例如,123.4567,lena为3,lenb为4.

            flag——正负号,大于等于零为1,小于零为-1(即0为+0)

          支持操作
            输入输出(input(),output())——能过滤或矫正一些非法输入,详见代码

            四则运算(plus(),sub(),mult(),divi())(除法提供的第四个参数为保留小数位数,上限大概是500减去除数的lena+lenb

            比较大小(cmp())比较两数绝对值大小,带符号比较的那部分被我注释了

            调试(debug()),输出结构体内部信息

        两个头文件均支持部分文件输入输出功能,使用方法见前端( 雾 )代码(main.cpp)

      以上是关于后端两个库的简介,使用方法见前端(其实)

        输入输出方式

          0、不使用文件

            该模式下全部从终端或控制台输入输出

          1、使用文件

            输入输出均从文件,用户自定义两个文件名,判断输入文件是否存在那里还没调好,被我暂时注释了,由于ddl,就先默认输入文件存在。

            之后的操作提示信息依然会显示在终端,但输入数据和答案会从文件读取和写入文件

            原理大概是现在终端输出提示信息,然后重定向到文件,输出答案,再重定向回终端,输出提示信息,输入同理。

            这部分暂时不支持终端输入,输出到文件,或文件输入,输出到终端(ddl,ddl,还是ddl……)

        我快期末考了,高数还在挂科边缘挣扎,就不多说,直接上代码吧

    源代码

      后端

      1 #ifndef MY_INTEGER_H
      2 #define MY_INTEGER_H
      3 
      4 #include<stdio.h>
      5 #include<string.h>
      6 #include<stdlib.h>
      7 #include<stdbool.h>
      8 
      9 #ifndef MMSU
     10 #define MMSU
     11 char inputFileName[300];
     12 char outputFileName[300];
     13 static inline int Max(int a,int b){return a>b?a:b;}
     14 static inline int Min(int a,int b){return a>b?b:a;}
     15 static inline void swap(int & a,int & b){int t=a;a=b;b=t;}
     16 static inline void usefile_out(){fflush(stdout);freopen(outputFileName,"a",stdout);}
     17 static inline void usescreen_out()
     18 {
     19     fflush(stdout);//将输出缓冲区清空
     20     #ifdef WINVER
     21     freopen( "CON", "w", stdout);
     22     #else
     23     freopen("/dev/tty","w",stdout);
     24     #endif
     25 }
     26 static inline FILE* usefile_in(){return freopen(inputFileName,"r",stdin);}
     27 static inline void usescreen_in()
     28 {
     29     #ifdef WINVER
     30     freopen("CON", "r", stdin);
     31     #else
     32     freopen("/dev/tty", "r", stdin); 
     33     #endif
     34 }
     35 #endif
     36 
     37 struct integer{
     38     int num[100000];
     39     int len;//开区间
     40     int flag;
     41     integer(){len=0;flag=1;memset(num,0,sizeof(num));}
     42 };
     43 typedef struct integer integer;
     44 
     45 void debug(integer *n)
     46 {
     47     int i;
     48     printf("
    *********************
    len:%d  flag:%d  
    ",n->len,n->flag);
     49     for(i=0;i<15;i++) printf("%d:%d
    ",i,n->num[i]);
     50     printf("**************************
    ");
     51 }
     52 static void reset(integer *a)
     53 {
     54     memset(a,0,sizeof(*a));
     55     a->flag=1;
     56 }
     57 static void carry(integer *a)
     58 {
     59     int i=0;
     60     for(i=0;i<a->len;i++)
     61     {
     62         if(a->num[i]>9)
     63         {
     64             a->num[i+1]+=a->num[i]/10;
     65             a->num[i]%=10;
     66             if(i+1==a->len) a->len++;
     67         }
     68     }
     69 }
     70 
     71 void input(integer *a)
     72 {
     73     int i,j;
     74     char in=getchar();
     75     reset(a);
     76     i=0;
     77     while(in!='-'&&(in<'0'||in>'9')) in=getchar();
     78     if(in=='-') a->flag=-1;
     79     else a->num[i++]=in-'0';
     80     in=getchar();
     81     while(in<='9'&&in>='0')
     82     {
     83         a->num[i++]=in-'0';
     84         in=getchar();
     85     }
     86     j=0;
     87     a->len=i;
     88     i--;
     89     while(i>=j) swap(a->num[i--],a->num[j++]);
     90     while(!a->num[a->len-1]&&a->len>0) a->len--;
     91     if(a->len==0) a->flag=1;
     92 }
     93 void output(integer *n)
     94 {
     95     int i;
     96     if(n->flag==-1)
     97         printf("-");
     98     if(n->len==0)
     99         printf("0"); 
    100     for(i=n->len-1;i>=0;i--)
    101     {
    102       printf("%d",n->num[i]);
    103     }
    104 }
    105 int cmp(integer *n1,integer *n2)//绝对值比较 
    106 {
    107     int i;
    108     if(n1->len>n2->len)
    109         return 1;
    110     if(n1->len<n2->len)
    111         return 2;
    112     for(i=n1->len-1;i>-1;i--)
    113     {
    114         if(n1->num[i]>n2->num[i])
    115             return 1;
    116         if(n1->num[i]<n2->num[i])
    117             return 2;    
    118     }
    119     return 0;
    120 }
    121 
    122 void sub(integer *a,integer *b,integer *c);
    123 void plus(integer *n1,integer *n2,integer *n3)
    124 {
    125     int i;
    126     reset(n3);
    127     if(n1->flag*n2->flag<0)//异号
    128     {
    129         if(n1->flag<0)
    130         {
    131             n1->flag=1;
    132             sub(n2,n1,n3);
    133             n1->flag=-1;
    134             return;
    135         }
    136         else
    137         {
    138             n2->flag=1;
    139             sub(n1,n2,n3);
    140             n2->flag=-1;
    141             return;
    142         }
    143     }
    144     //同号
    145     n3->len=(n1->len<n2->len)?n2->len:n1->len;
    146     for(i=0;i<n3->len;i++)
    147     {
    148         n3->num[i]+=n1->num[i]+n2->num[i];
    149     }
    150     carry(n3);
    151     n3->flag=n1->flag;
    152 }
    153 void sub(integer *a,integer *b,integer *c)
    154 {
    155     int i;
    156     reset(c);
    157     if(a->flag*b->flag<0)//异号
    158     {
    159         if(a->flag==-1)//(-5)-3
    160         {
    161             a->flag=1;
    162             plus(a,b,c);
    163             a->flag=-1;
    164             c->flag=-1;
    165             return;
    166         }
    167 
    168         else//5-(-3)
    169         {
    170             b->flag=1;
    171             plus(a,b,c);
    172             b->flag=-1;
    173             return;
    174         }
    175     }
    176     //同号
    177     if(a->flag<0)//(-3)-(-5)//同为负
    178     {
    179         b->flag=1;
    180         plus(a,b,c);
    181         b->flag=-1;
    182         return;
    183     }
    184     if(cmp(a,b)==2)//3-5同正小减大
    185     {
    186         sub(b,a,c);
    187         c->flag=-1;
    188         return;
    189     }
    190     // 同正大减小 a-b
    191     c->len=Max(a->len,b->len);
    192     for(i=0;i<c->len;i++)
    193     {
    194         c->num[i]+=a->num[i]-b->num[i];
    195         if(c->num[i]<0)
    196         {
    197             c->num[i+1]--;
    198             c->num[i]+=10;
    199         }
    200     }
    201     while((!c->num[c->len-1])&&c->len>0) c->len--;
    202 }
    203 void mult(integer *n1,integer *n2,integer *n3)
    204 {
    205     int i,j;
    206     reset(n3);
    207     for(i=0;i<n1->len;i++)
    208     {
    209         for(j=0;j<n2->len;j++)
    210         {
    211               n3->num[i+j]+=n1->num[i]*n2->num[j];
    212         }
    213     }
    214     n3->len=n1->len+n2->len;
    215     carry(n3);
    216     n3->flag=n1->flag*n2->flag;
    217     while(n3->num[n3->len-1]==0&&n3->len>0) n3->len--; 
    218     if(n3->len==0) n3->flag=1;
    219 }
    220 void divi(integer *a,integer *b,integer *c,integer *d)
    221 {
    222     int i,j;
    223     integer tempa;//记录余数
    224     integer tempb;//记录移位以后
    225     integer tempc;
    226     reset(&tempb);
    227     reset(c);reset(d);
    228     tempa=*a;
    229     tempa.flag=1;
    230     if(b->len==0)
    231     {
    232         printf("1.#INF
    ");
    233         exit(0);
    234     }
    235     if(a->len==0) return;
    236     
    237     for(i=b->len-1;i>=0;i--)
    238     {
    239         tempb.num[i+a->len-b->len]=b->num[i];
    240         tempb.len=a->len;
    241     }
    242     for(i=a->len-b->len;i>=0;i--)
    243     {
    244         int count=0;
    245         while(cmp(&tempb,&tempa)!=1)
    246         {
    247             reset(&tempc);//记录减法以后的结果 // 每次构造函数初始化
    248             sub(&tempa,&tempb,&tempc);
    249             tempa=tempc;
    250             count++;
    251         }
    252         c->num[i]=count;
    253         for(j=1;j<=tempb.len;j++)
    254             tempb.num[j-1]=tempb.num[j];
    255         tempb.num[tempb.len--]=0;
    256     }
    257     c->flag=a->flag*b->flag;
    258     *d=tempa;
    259     c->len=a->len;
    260     while(!c->num[c->len-1]&&c->len>0) c->len--;
    261     if(c->len==0) c->flag=1;
    262 }
    263 
    264 bool is_prime(integer *a)//判断质数
    265 {
    266     integer i,q,r;
    267     
    268     if(a->len==1)
    269     {
    270         if(a->num[0]<2) return false;
    271         if(a->num[0]==2) return true;
    272     }
    273     
    274     i.len=1;
    275     i.num[0]=2;
    276     while(cmp(a,&i)==1)
    277     {
    278         divi(a,&i,&q,&r);
    279         if(r.len==0) return false;
    280         i.num[0]++;
    281         carry(&i);
    282     }
    283     return true;
    284 }
    285 
    286 void twins_prime(integer *l,integer *r)//闭区间//含输出
    287 {
    288     int tot=0;
    289     integer i1,i2;
    290     if(r->flag<0)
    291     {
    292         printf("Not Found
    
    ");
    293         return;
    294     }
    295     
    296     if(l->flag<0)
    297     {
    298         i1.num[0]=3;
    299         i2.num[0]=5;
    300         i1.len=1;
    301         i2.len=1;
    302     }
    303     else if(l->len<=1&&l->num[0]<3)
    304     {
    305         i1.num[0]=3,i2.num[0]=5,i1.len=1,i2.len=1;
    306     }
    307     else if(l->num[0]&1)//是奇数
    308     {
    309         i2=i1=*l;
    310         i2.num[0]+=2;
    311         carry(&i2);
    312     }
    313     else
    314     {
    315         i1=*l;
    316         i1.num[0]++;
    317         carry(&i1);
    318         i2=i1;
    319         i2.num[0]+=2;
    320         carry(&i2);
    321     }
    322     while(cmp(&i2,r)!=1)
    323     {
    324         if(is_prime(&i1)&&is_prime(&i2))
    325         {
    326             tot++;
    327             printf("%d:	(  ",tot);output(&i1);printf("			, ");output(&i2);printf("		)
    ");
    328         }
    329         i1=i2;
    330         i2.num[0]+=2;
    331         carry(&i2);
    332     }
    333     if(!tot) printf("Not Found
    
    ");
    334     return;
    335 }
    336 
    337 void fac(int n,integer *n3)
    338 {
    339     int i,j;
    340     reset(n3);
    341     if(n<=0)
    342     {
    343         n3->num[0]=1;
    344         n3->len=0;
    345         n3->flag=1;
    346         return;
    347     }
    348     n3->num[0]=1;
    349     n3->len=1;
    350     n3->flag=1;
    351     for(i=1;i<=n;i++)
    352     {
    353         for(j=0;j<n3->len;j++)
    354         {
    355             n3->num[j]*=i;
    356         }
    357         carry(n3);
    358     }
    359 }
    360 #endif
    My_integer.h
      1 #ifndef MY_DECIMAL_H
      2 #define MY_DECIMAL_H
      3 
      4 #include<stdio.h>
      5 #include<stdlib.h>
      6 #include<string.h>
      7 
      8 #ifndef MMSU
      9 #define MMSU
     10 char inputFileName[300];
     11 char outputFileName[300];
     12 static inline int Max(int a,int b){return a>b?a:b;}
     13 static inline int Min(int a,int b){return a>b?b:a;}
     14 static inline void swap(int & a,int & b){int t=a;a=b;b=t;}
     15 static inline void usefile_out(){fflush(stdout);freopen(outputFileName,"a",stdout);}
     16 static inline void usescreen_out()
     17 {
     18     fflush(stdout);//将输出缓冲区清空
     19     #ifdef WINVER
     20     freopen( "CON", "w", stdout);
     21     #else
     22     freopen("/dev/tty","w",stdout);
     23     #endif
     24 }
     25 static inline FILE* usefile_in(){return freopen(inputFileName,"r",stdin);}
     26 static inline void usescreen_in()
     27 {
     28     #ifdef WINVER
     29     freopen("CON", "r", stdin);
     30     #else
     31     freopen("/dev/tty", "r", stdin); 
     32     #endif
     33 }
     34 #endif
     35 
     36 struct BigNumber{//定点高精度小数"类"
     37     int num[1000];//num[500]为个位,平时存数值,输入输出时用%d
     38     int lena,lenb;//闭区间,a为整数部分,b为小数部分
     39     int flag;
     40 };
     41 typedef struct BigNumber BigNumber;
     42 void debug(BigNumber a)
     43 {
     44     printf("
    *********************
    flag::%d  lena::%d  lenb::%d
    ",a.flag,a.lena,a.lenb);
     45     for(int ii=490;ii<=510;ii++) printf("%d::%d
    ",ii,a.num[ii]);
     46     printf("**********************
    ");
     47 }
     48 static void reset(BigNumber *a)
     49 {
     50     memset(a,0,sizeof(*a));
     51     a->flag=1;
     52 }
     53 void input(BigNumber *a)
     54 {
     55     int i,j;
     56     char in=getchar();
     57     reset(a);
     58     i=500;
     59     while(in!='-'&&(in<'0'||in>'9')) in=getchar();
     60     if(in=='-') a->flag=-1;
     61     else a->num[i++]=in-'0';
     62     in=getchar();
     63     while(in<='9'&&in>='0')
     64     {
     65         a->num[i++]=in-'0';
     66         in=getchar();
     67     }
     68 
     69     j=500;
     70     a->lena=i-500;
     71     i--;
     72     while(i>=j) swap(a->num[i--],a->num[j++]);
     73     while(!a->num[a->lena+499]&&a->lena>0) a->lena--;
     74     i=499;
     75     if(in!='.')
     76     {
     77         if(a->lena==0) a->flag=1;
     78         return;
     79     }
     80     in=getchar();
     81     while(in<='9'&&in>='0')
     82     {
     83         a->num[i--]=in-'0';
     84         in=getchar();
     85     }
     86     a->lenb=500-i;
     87     while(!a->num[500-a->lenb]&&a->lenb>0)a->lenb--;
     88     if(a->lena==0&&a->lenb==0) a->flag=1;
     89 }
     90 void output(BigNumber *a)
     91 {
     92     int i;
     93     if(a->flag==-1&&(a->lena|a->lenb)) printf("-");
     94     if(!a->lena) printf("0");
     95     else
     96     {
     97         i=a->lena+499;
     98         while(i>=500)printf("%d",a->num[i--]);
     99     }
    100     printf(".");
    101     if(!a->lenb)
    102     {
    103         printf("0");
    104         return;
    105     }
    106     i=499;
    107     while(i>=500-a->lenb) printf("%d",a->num[i--]);
    108     return;
    109 }
    110 int cmp(BigNumber *a , BigNumber *b)//比较绝对值,0相等,1a大,2b大
    111 {
    112     int i;
    113     // if(a->flag*b->flag==-1)//异号
    114     // {
    115     //     if(a->flag==-1) return 2;
    116     //     else return 1;
    117     // }
    118     if(a->lena>b->lena)
    119     {
    120         // if(a->flag>0)
    121         return 1;
    122         //else return 2;
    123     }
    124     else if(a->lena<b->lena)
    125     {
    126         // if(a->flag>0)
    127         return 2;
    128         //else return 1;
    129     }
    130     
    131     int end=Min(500-a->lenb,500-b->lenb);
    132     for(i=a->lena+500;i>=end;i--)
    133     {
    134         if(a->num[i]>b->num[i])
    135         {
    136             // if(a->flag>0)
    137             return 1;
    138             // else return 2;
    139         }
    140         else if(a->num[i]<b->num[i])
    141         {
    142             // if(a->flag>0)
    143             return 2;
    144             // else return 1;
    145         }
    146     }
    147     return 0;
    148 }
    149 void sub(BigNumber *a,BigNumber *b,BigNumber *c);
    150 void plus(BigNumber *a,BigNumber *b,BigNumber *c)
    151 {
    152     int i;
    153     reset(c);
    154     if(a->flag*b->flag<0)//异号
    155     {
    156         if(a->flag<0)
    157         {
    158             a->flag=1;
    159             sub(b,a,c);
    160             a->flag=-1;
    161             return;
    162         }
    163         else
    164         {
    165             b->flag=1;
    166             sub(a,b,c);
    167             b->flag=-1;
    168             return;
    169         }
    170     }
    171     //同号
    172     c->lenb=Max(a->lenb,b->lenb);//c的小数部分长度
    173     c->lena=Max(a->lena,b->lena);
    174     for(i=500-c->lenb;i<=c->lena+500;i++)
    175     {
    176         c->num[i]+=a->num[i]+b->num[i];
    177         if(c->num[i]>9)
    178         {
    179             c->num[i+1]++;
    180             c->num[i]%=10;
    181             if(i==c->lena+499) c->lena++;
    182         }
    183     }
    184     c->flag=a->flag;
    185 }
    186 void sub(BigNumber *a,BigNumber *b,BigNumber *c)
    187 {
    188     int i;
    189     reset(c);
    190     if(a->flag*b->flag<0)//异号
    191     {
    192         if(a->flag==-1)//(-5)-3
    193         {
    194             a->flag=1;
    195             plus(a,b,c);
    196             a->flag=-1;
    197             c->flag=-1;
    198             return;
    199         }
    200 
    201         else//5-(-3)
    202         {
    203             b->flag=1;
    204             plus(a,b,c);
    205             b->flag=-1;
    206             return;
    207         }
    208     }
    209     //同号
    210     if(a->flag<0)//(-3)-(-5)//同为负
    211     {
    212         b->flag=1;
    213         plus(a,b,c);
    214         b->flag=-1;
    215         return;
    216     }
    217     if(cmp(a,b)==2)//3-5同正小减大
    218     {
    219         sub(b,a,c);
    220         c->flag=-1;
    221         return;
    222     }
    223     // 同正大减小 a-b
    224     c->lenb=Max(a->lenb,b->lenb);
    225     c->lena=Max(a->lena,b->lena);
    226     for(i=500-c->lenb;i<=c->lena+499;i++)
    227     {
    228         c->num[i]+=a->num[i]-b->num[i];
    229         if(c->num[i]<0)
    230         {
    231             c->num[i+1]--;
    232             c->num[i]+=10;
    233         }
    234     }
    235     while((!c->num[c->lena+499])&&c->lena>0) c->lena--;
    236     while((!c->num[500-c->lenb])&&c->lenb>0) c->lenb--;
    237 }
    238 void mult(BigNumber *a,BigNumber *b,BigNumber *c)
    239 {
    240     int i,j;
    241     int *aa=a->num+500,*bb=b->num+500,*cc=c->num+500;
    242     reset(c);
    243     for(i=-a->lenb;i<=a->lena;i++)
    244     {
    245         for(j=-b->lenb;j<=b->lena;j++)
    246         {
    247             cc[i+j]+=aa[i]*bb[j];
    248         }
    249     }
    250     for(i=0;c->num[i]==0&&i<500;i++);
    251     if(i==500) c->lenb=0;
    252     else c->lenb=500-i;
    253     
    254     for(c->lena=499;c->lena>0&&c->num[c->lena+499]==0;c->lena--);
    255     
    256     for(;i<=c->lena+500;i++)
    257     {
    258         if(c->num[i]>9)
    259         {
    260             c->num[i+1]+=c->num[i]/10;
    261             c->num[i]%=10;
    262             if(i==c->lena+499) c->lena++;
    263         }
    264     }
    265     c->flag=a->flag*b->flag;
    266 }
    267 void divi(BigNumber *a,BigNumber *b,BigNumber *c,int n)//n受限于ab位数之差,未对低位进行舍弃,默认装得下
    268 {
    269     int i,j;
    270     BigNumber tempa=*a;//记录余数
    271     BigNumber tempb;//记录移位以后
    272     reset(c);
    273     if(b->lena==0&&b->lenb==0)
    274     {
    275         printf("1.#INF
    ");
    276         exit(0);
    277     }
    278     for(i=b->lena+499;i>=500-b->lenb;i--)
    279     {
    280         tempb.num[i+a->lena-b->lena]=b->num[i];
    281     }
    282     tempb.lena=a->lena;
    283     tempb.lenb=2*b->lenb-a->lenb;
    284     if(tempb.lenb<0) tempb.lenb=0;
    285     for(i=a->lena-b->lena+500;i>=500-n;i--)
    286     {
    287         int count=0;
    288         //向右移1位b,减到不能减为止
    289         while(cmp(&tempb,&tempa)!=1)
    290         {
    291             BigNumber tempc;//记录减法以后的结果 // 每次构造函数初始化
    292             sub(&tempa,&tempb,&tempc);
    293             tempa=tempc;
    294             count++;
    295         }
    296         c->num[i]=count;
    297         for(j=500-tempb.lenb;j<=tempb.lena+499;j++)
    298             tempb.num[j-1]=tempb.num[j];
    299         tempb.num[tempb.lena+499]=0;
    300         if(tempb.lena>0) tempb.lena--;
    301         if(tempb.num[500-tempb.lenb-1]) tempb.lenb++;
    302     }
    303 
    304     c->flag=a->flag*b->flag;
    305     c->lena=500;
    306     while(!c->num[c->lena+499]&&c->lena>0) c->lena--;
    307     c->lenb=500;
    308     while((!c->num[500-c->lenb])&&c->lenb>0) c->lenb--;
    309 }
    310 #endif
    My_decimal.h

      前端

      1 #include<stdio.h>
      2 #include "My_decimal.h"
      3 #include "My_integer.h"
      4 int main()
      5 {
      6     int i, ff, ffin;
      7     integer n1, n2, n3, n4;
      8     BigNumber m1, m2, m3;
      9 
     10     printf("是否从文件读入数据并存入文件?1/0 ");
     11     scanf("%d", &ffin);
     12     if (ffin)
     13     {
     14         printf("储存数据的文件名称: ");
     15         scanf("%s", inputFileName);
     16         if(usefile_in()==NULL)
     17         {
     18             usescreen_in();
     19             printf("找不到文件!
    ");
     20             return 0;
     21         }
     22         usescreen_in();
     23     }
     24     
     25     ff = ffin;
     26     // printf("是否将结果输出到文件?1/0 ");
     27     // scanf("%d",&ff);
     28     if (ff)
     29     {
     30         printf("输入储存答案的文件名称: ");
     31         scanf("%s", outputFileName);
     32     }
     33 
     34     while (1)
     35     {
     36         printf("进行整数运算请输入1,进行小数运算请输入2
    ");
     37         scanf("%d", &i);
     38         if (i == 1)
     39         {
     40             printf("~请选择整数运算~
    计算a+b请输入1");
     41             printf("
    计算a-b请输入2");
     42             printf("
    计算a*b请输入3");
     43             printf("
    计算a/b请输入4");
     44             printf("
    计算a的阶乘请输入5");
     45             printf("
    计算孪生质数请输入6
    ");
     46             scanf("%d", &i);
     47             if (i == 1)
     48             {
     49                 if (ffin)
     50                     usefile_in();
     51                 if (!ffin)
     52                     printf("请输入一个数");
     53                 input(&n1);
     54                 if (!ffin)
     55                     printf("请输入一个数");
     56                 input(&n2);
     57                 if (ffin)
     58                     usescreen_in();
     59                 plus(&n1, &n2, &n3);
     60                 if (ff)
     61                     usefile_out();
     62                 putchar('(');
     63                 output(&n1);
     64                 putchar(')');
     65                 putchar('+');
     66                 putchar('(');
     67                 output(&n2);
     68                 putchar(')');
     69                 putchar('=');
     70                 output(&n3);
     71                 printf("
    ");
     72                 if (ff)
     73                 {
     74                     usescreen_out();
     75                     printf("完成!
    ");
     76                 }
     77             }
     78             else if (i == 2)
     79             {
     80                 if (ffin)
     81                     usefile_in();
     82                 if (!ffin)
     83                     printf("请输入一个数");
     84                 input(&n1);
     85                 if (!ffin)
     86                     printf("请输入一个数");
     87                 input(&n2);
     88                 if (ffin)
     89                     usescreen_in();
     90                 sub(&n1, &n2, &n3);
     91                 if (ff)
     92                     usefile_out();
     93                 putchar('(');
     94                 output(&n1);
     95                 putchar(')');
     96                 putchar('-');
     97                 putchar('(');
     98                 output(&n2);
     99                 putchar(')');
    100                 putchar('=');
    101                 output(&n3);
    102                 printf("
    ");
    103                 if (ff)
    104                 {
    105                     usescreen_out();
    106                     printf("完成!
    ");
    107                 }
    108             }
    109             else if (i == 3)
    110             {
    111                 if (ffin)
    112                     usefile_in();
    113                 if (!ffin)
    114                     printf("请输入一个数");
    115                 input(&n1);
    116                 if (!ffin)
    117                     printf("请输入一个数");
    118                 input(&n2);
    119                 if (ffin)
    120                     usescreen_in();
    121                 mult(&n1, &n2, &n3);
    122                 if (ff)
    123                     usefile_out();
    124                 putchar('(');
    125                 output(&n1);
    126                 putchar(')');
    127                 printf("×");
    128                 putchar('(');
    129                 output(&n2);
    130                 putchar(')');
    131                 putchar('=');
    132                 output(&n3);
    133                 printf("
    ");
    134                 if (ff)
    135                 {
    136                     usescreen_out();
    137                     printf("完成!
    ");
    138                 }
    139             }
    140             else if (i == 4)
    141             {
    142                 if (ffin)
    143                     usefile_in();
    144                 if (!ffin)
    145                     printf("请输入一个数");
    146                 input(&n1);
    147                 if (!ffin)
    148                     printf("请输入一个数");
    149                 input(&n2);
    150                 if (ffin)
    151                     usescreen_in();
    152                 divi(&n1, &n2, &n3, &n4);
    153                 if (ff)
    154                     usefile_out();
    155                 putchar('(');
    156                 output(&n1);
    157                 putchar(')');
    158                 printf("÷");
    159                 putchar('(');
    160                 output(&n2);
    161                 putchar(')');
    162                 putchar('=');
    163                 output(&n3);
    164                 printf("………………");
    165                 output(&n4);
    166                 printf("
    ");
    167                 if (ff)
    168                 {
    169                     usescreen_out();
    170                     printf("完成!
    ");
    171                 }
    172             }
    173             else if (i == 5)
    174             {
    175                 if (ffin)
    176                     usefile_in();
    177                 if (!ffin)
    178                     printf("输入一个正整数:");
    179                 scanf("%d", &i);
    180                 if (ffin)
    181                     usescreen_in();
    182                 fac(i, &n3);
    183                 if (ff)
    184                     usefile_out();
    185                 printf("(%d)!=", i);
    186                 output(&n3);
    187                 printf("
    ");
    188                 if (ff)
    189                 {
    190                     usescreen_out();
    191                     printf("完成!
    ");
    192                 }
    193             }
    194             else if (i == 6)
    195             {
    196                 if (ffin)
    197                     usefile_in();
    198                 if (!ffin)
    199                     printf("请输入下界");
    200                 input(&n1);
    201                 if (!ffin)
    202                     printf("请输入上界");
    203                 input(&n2);
    204                 if (ffin)
    205                     usescreen_in();    
    206                 if(ff)
    207                     printf("Wait for a while...
    ");
    208                 if (ff)
    209                     usefile_out();
    210                 twins_prime(&n1, &n2);
    211                 if (ff)
    212                     usescreen_out();
    213                 printf("孪生质数计算完成!
    ");
    214             }
    215         }
    216         else if (i == 2)
    217         {
    218             printf("~请选择小数运算~
    计算a+b请输入1");
    219             printf("
    计算a-b请输入2");
    220             printf("
    计算a*b请输入3");
    221             printf("
    计算a/b请输入4
    ");
    222             scanf("%d", &i);
    223             if (i == 1)
    224             {
    225                 if (ffin)
    226                     usefile_in();
    227                 if (!ffin)
    228                     printf("请输入一个数");
    229                 input(&m1);
    230                 if (!ffin)
    231                     printf("请输入一个数");
    232                 input(&m2);
    233                 if (ffin)
    234                     usescreen_in();
    235                 plus(&m1, &m2, &m3);
    236                 if (ff)
    237                     usefile_out();
    238                 putchar('(');
    239                 output(&m1);
    240                 putchar(')');
    241                 putchar('+');
    242                 putchar('(');
    243                 output(&m2);
    244                 putchar(')');
    245                 putchar('=');
    246                 output(&m3);
    247                 ;
    248                 printf("
    ");
    249                 if (ff)
    250                 {
    251                     usescreen_out();
    252                     printf("完成!
    ");
    253                 }
    254             }
    255             else if (i == 2)
    256             {
    257                 if (ffin)
    258                     usefile_in();
    259                 if (!ffin)
    260                     printf("请输入一个数");
    261                 input(&m1);
    262                 if (!ffin)
    263                     printf("请输入一个数");
    264                 input(&m2);
    265                 if (ffin)
    266                     usescreen_in();
    267                 sub(&m1, &m2, &m3);
    268                 if (ff)
    269                     usefile_out();
    270                 putchar('(');
    271                 output(&m1);
    272                 putchar(')');
    273                 putchar('-');
    274                 putchar('(');
    275                 output(&m2);
    276                 putchar(')');
    277                 putchar('=');
    278                 output(&m3);
    279                 ;
    280                 printf("
    ");
    281                 if (ff)
    282                 {
    283                     usescreen_out();
    284                     printf("完成!
    ");
    285                 }
    286             }
    287             else if (i == 3)
    288             {
    289                 if (ffin)
    290                     usefile_in();
    291                 if (!ffin)
    292                     printf("请输入一个数");
    293                 input(&m1);
    294                 if (!ffin)
    295                     printf("请输入一个数");
    296                 input(&m2);
    297                 if (ffin)
    298                     usescreen_in();
    299                 mult(&m1, &m2, &m3);
    300                 if (ff)
    301                     usefile_out();
    302                 putchar('(');
    303                 output(&m1);
    304                 putchar(')');
    305                 printf("×");
    306                 putchar('(');
    307                 output(&m2);
    308                 putchar(')');
    309                 putchar('=');
    310                 output(&m3);
    311                 ;
    312                 printf("
    ");
    313                 if (ff)
    314                 {
    315                     usescreen_out();
    316                     printf("完成!
    ");
    317                 }
    318             }
    319             else if (i == 4)
    320             {
    321                 if (ffin)
    322                     usefile_in();
    323                 if (!ffin)
    324                     printf("请输入一个数");
    325                 input(&m1);
    326                 if (!ffin)
    327                     printf("请输入一个数");
    328                 input(&m2);
    329                 if (ffin)
    330                     usescreen_in();
    331                 printf("保留几位小数:");
    332                 scanf("%d", &i);
    333                 divi(&m1, &m2, &m3, i);
    334                 if (ff)
    335                     usefile_out();
    336                 putchar('(');
    337                 output(&m1);
    338                 putchar(')');
    339                 printf("÷");
    340                 putchar('(');
    341                 output(&m2);
    342                 putchar(')');
    343                 putchar('=');
    344                 output(&m3);
    345                 ;
    346                 printf("
    ");
    347                 if (ff)
    348                 {
    349                     usescreen_out();
    350                     printf("完成!
    ");
    351                 }
    352             }
    353         }
    354         else
    355         {
    356             printf("错误");
    357             continue;
    358         }
    359         if (ffin)
    360         {
    361             printf("Done!
    ");
    362             return 0;
    363         }
    364         printf("*****退出程序请输入:0,继续请输入:1*****
    ");
    365         scanf("%d", &i);
    366         if (i == 1)
    367             continue;
    368         else
    369             break;
    370     }
    371     return 0;
    372 }
    main.cpp

     

    发现自己还不会用github存代码时的表情

  • 相关阅读:
    2021总结、2022展望
    新人报到
    第六次实验
    第五次实验
    第一次实验
    第三次实验
    第二次实验
    第四次实验
    实验七
    Tomcat10巨坑,软件不是越新越好。(用到tomcat9及以下就可以)
  • 原文地址:https://www.cnblogs.com/wawcac-blog/p/10229680.html
Copyright © 2020-2023  润新知