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

吐槽

  丧心病狂的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(){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("\n*********************\nlen:%d  flag:%d  \n",n->len,n->flag);
 49     for(i=0;i<15;i++) printf("%d:%d\n",i,n->num[i]);
 50     printf("**************************\n");
 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\n");
233         exit(0);
234     }
235     if(a->len==0) return;
236     
237     for(i=b->len-1;i>=0;i--)
238         tempb.num[i+a->len-b->len]=b->num[i];
239 
240     tempb.len=a->len;
241     for(i=a->len-b->len;i>=0;i--)
242     {
243         int count=0;
244         while(cmp(&tempb,&tempa)!=1)
245         {
246             reset(&tempc);//记录减法以后的结果 // 每次构造函数初始化
247             sub(&tempa,&tempb,&tempc);
248             tempa=tempc;
249             count++;
250         }
251         c->num[i]=count;////////////////////////////////////////
252         for(j=1;j<=tempb.len;j++)
253             tempb.num[j-1]=tempb.num[j];
254         tempb.num[tempb.len--]=0;
255     }
256     c->flag=a->flag*b->flag;
257     *d=tempa;
258     c->len=a->len;
259     while(!c->num[c->len-1]&&c->len>0) c->len--;
260     if(c->len==0) c->flag=1;
261 }
262 
263 bool is_prime(integer *a)//判断质数
264 {
265     integer i,q,r;
266     
267     if(a->len==1)
268     {
269         if(a->num[0]<2) return false;
270         if(a->num[0]==2) return true;
271     }
272     
273     i.len=1;
274     i.num[0]=2;
275     while(cmp(a,&i)==1)
276     {
277         divi(a,&i,&q,&r);
278         if(r.len==0) return false;
279         i.num[0]++;
280         carry(&i);
281     }
282     return true;
283 }
284 
285 void twins_prime(integer *l,integer *r,int ff)//闭区间//含输出
286 {
287     printf("^^^"); 
288     int tot=0;
289     integer i1,i2;
290     printf("Wait for a while...\n");
291     fflush(stdout);
292     if(ff) usefile_out();
293     if(r->flag<0)
294     {
295         printf("Not Found\n\n");
296         return;
297     }
298     
299     if(l->flag<0)
300     {
301         i1.num[0]=3;
302         i2.num[0]=5;
303         i1.len=1;
304         i2.len=1;
305     }
306     else if(l->len<=1&&l->num[0]<3)
307     {
308         i1.num[0]=3,i2.num[0]=5,i1.len=1,i2.len=1;
309     }
310     else if(l->num[0]&1)//是奇数
311     {
312         i2=i1=*l;
313         i2.num[0]+=2;
314         carry(&i2);
315     }
316     else
317     {
318         i1=*l;
319         i1.num[0]++;
320         carry(&i1);
321         i2=i1;
322         i2.num[0]+=2;
323         carry(&i2);
324     }
325     while(cmp(&i2,r)!=1)
326     {
327         if(is_prime(&i1)&&is_prime(&i2))
328         {
329             tot++;
330             printf("%d::\t(  ",tot);output(&i1);printf("\t\t\t, ");output(&i2);printf("\t\t)\n");
331         }
332         i1=i2;
333         i2.num[0]+=2;
334         carry(&i2);
335     }
336     if(!tot) printf("Not Found\n\n");
337     if(ff)
338     {
339         printf("\n");
340         usescreen_out();
341     }
342     printf("完成!\n");
343 }
344 
345 void fac(int n,integer *n3)
346 {
347     int i,j;
348     reset(n3);
349     if(n<=0)
350     {
351         n3->num[0]=1;
352         n3->len=0;
353         n3->flag=1;
354         return;
355     }
356     n3->num[0]=1;
357     n3->len=1;
358     n3->flag=1;
359     for(i=1;i<=n;i++)
360     {
361         for(j=0;j<n3->len;j++)
362         {
363             n3->num[j]*=i;
364         }
365         carry(n3);
366     }
367 }
368 #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(){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 void usefile_in(){freopen(inputFileName,"r",stdin);}
 26 static inline void usescreen_in()
 27 {
 28     #ifdef WINVER
 29     freopen( "CON", "r", stdout);
 30     #else
 31     freopen("/dev/tty","r",stdout);
 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("\n*********************\nflag::%d  lena::%d  lenb::%d\n",a.flag,a.lena,a.lenb);
 45     for(int ii=490;ii<=510;ii++) printf("%d::%d\n",ii,a.num[ii]);
 46     printf("**********************\n");
 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     return;
 90 }
 91 void output(BigNumber *a)
 92 {
 93     int i;
 94     if(a->flag==-1&&(a->lena|a->lenb)) printf("-");
 95     if(!a->lena) printf("0");
 96     else
 97     {
 98         i=a->lena+499;
 99         while(i>=500)printf("%d",a->num[i--]);
100     }
101     printf(".");
102     if(!a->lenb)
103     {
104         printf("0");
105         return;
106     }
107     i=499;
108     while(i>=500-a->lenb) printf("%d",a->num[i--]);
109     return;
110 }
111 int cmp(BigNumber *a , BigNumber *b)//比较绝对值,0相等,1a大,2b大
112 {
113     int i;
114     // if(a->flag*b->flag==-1)//异号
115     // {
116     //     if(a->flag==-1) return 2;
117     //     else return 1;
118     // }
119     if(a->lena>b->lena)
120     {
121         // if(a->flag>0)
122         return 1;
123         //else return 2;
124     }
125     else if(a->lena<b->lena)
126     {
127         // if(a->flag>0)
128         return 2;
129         //else return 1;
130     }
131     
132     int end=Min(500-a->lenb,500-b->lenb);
133     for(i=a->lena+500;i>=end;i--)
134     {
135         if(a->num[i]>b->num[i])
136         {
137             // if(a->flag>0)
138             return 1;
139             // else return 2;
140         }
141         else if(a->num[i]<b->num[i])
142         {
143             // if(a->flag>0)
144             return 2;
145             // else return 1;
146         }
147     }
148     return 0;
149 }
150 void sub(BigNumber *a,BigNumber *b,BigNumber *c);
151 void plus(BigNumber *a,BigNumber *b,BigNumber *c)
152 {
153     int i;
154     reset(c);
155     if(a->flag*b->flag<0)//异号
156     {
157         if(a->flag<0)
158         {
159             a->flag=1;
160             sub(b,a,c);
161             a->flag=-1;
162             return;
163         }
164         else
165         {
166             b->flag=1;
167             sub(a,b,c);
168             b->flag=-1;
169             return;
170         }
171     }
172     //同号
173     c->lenb=Max(a->lenb,b->lenb);//c的小数部分长度
174     c->lena=Max(a->lena,b->lena);
175     for(i=500-c->lenb;i<=c->lena+500;i++)
176     {
177         c->num[i]+=a->num[i]+b->num[i];
178         if(c->num[i]>9)
179         {
180             c->num[i+1]++;
181             c->num[i]%=10;
182             if(i==c->lena+499) c->lena++;
183         }
184     }
185     c->flag=a->flag;
186 }
187 void sub(BigNumber *a,BigNumber *b,BigNumber *c)
188 {
189     int i;
190     reset(c);
191     if(a->flag*b->flag<0)//异号
192     {
193         if(a->flag==-1)//(-5)-3
194         {
195             a->flag=1;
196             plus(a,b,c);
197             a->flag=-1;
198             c->flag=-1;
199             return;
200         }
201 
202         else//5-(-3)
203         {
204             b->flag=1;
205             plus(a,b,c);
206             b->flag=-1;
207             return;
208         }
209     }
210     //同号
211     if(a->flag<0)//(-3)-(-5)//同为负
212     {
213         b->flag=1;
214         plus(a,b,c);
215         b->flag=-1;
216         return;
217     }
218     if(cmp(a,b)==2)//3-5同正小减大
219     {
220         sub(b,a,c);
221         c->flag=-1;
222         return;
223     }
224     // 同正大减小 a-b
225     c->lenb=Max(a->lenb,b->lenb);
226     c->lena=Max(a->lena,b->lena);
227     for(i=500-c->lenb;i<=c->lena+499;i++)
228     {
229         c->num[i]+=a->num[i]-b->num[i];
230         if(c->num[i]<0)
231         {
232             c->num[i+1]--;
233             c->num[i]+=10;
234         }
235     }
236     while((!c->num[c->lena+499])&&c->lena>0) c->lena--;
237     while((!c->num[500-c->lenb])&&c->lenb>0) c->lenb--;
238 }
239 void mult(BigNumber *a,BigNumber *b,BigNumber *c)
240 {
241     int i,j;
242     int *aa=a->num+500,*bb=b->num+500,*cc=c->num+500;
243     reset(c);
244     for(i=-a->lenb;i<=a->lena;i++)
245     {
246         for(j=-b->lenb;j<=b->lena;j++)
247         {
248             cc[i+j]+=aa[i]*bb[j];
249         }
250     }
251     for(i=0;c->num[i]==0&&i<500;i++);
252     if(i==500) c->lenb=0;
253     else c->lenb=500-i;
254     
255     for(c->lena=499;c->lena>0&&c->num[c->lena+499]==0;c->lena--);
256     
257     for(;i<=c->lena+500;i++)
258     {
259         if(c->num[i]>9)
260         {
261             c->num[i+1]+=c->num[i]/10;
262             c->num[i]%=10;
263             if(i==c->lena+499) c->lena++;
264         }
265     }
266     c->flag=a->flag*b->flag;
267 }
268 void divi(BigNumber *a,BigNumber *b,BigNumber *c,int n)//n受限于ab位数之差等因素,未对低位进行舍弃,默认装得下
269 {
270     int i,j;
271     BigNumber tempa=*a;//记录余数
272     BigNumber tempb;//记录移位以后
273     reset(c);
274     if(b->lena==0&&b->lenb==0)
275     {
276         printf("1.#INF\n");//故弄玄虚的除零报错
277         exit(0);
278     }
279     for(i=b->lena+499;i>=500-b->lenb;i--)
280     {
281         tempb.num[i+a->lena-b->lena]=b->num[i];
282     }
283     tempb.lena=a->lena;
284     tempb.lenb=2*b->lenb-a->lenb;
285     if(tempb.lenb<0) tempb.lenb=0;
286     for(i=a->lena-b->lena+500;i>=500-n;i--)
287     {
288         int count=0;
289         //向右移1位b,减到不能减为止
290         while(cmp(&tempb,&tempa)!=1)
291         {
292             BigNumber tempc;//记录减法以后的结果 // 每次构造函数初始化
293             sub(&tempa,&tempb,&tempc);
294             tempa=tempc;
295             count++;
296         }
297         c->num[i]=count;
298         for(j=500-tempb.lenb;j<=tempb.lena+499;j++)
299             tempb.num[j-1]=tempb.num[j];
300         tempb.num[tempb.lena+499]=0;
301         if(tempb.lena>0) tempb.lena--;
302         if(tempb.num[500-tempb.lenb-1]) tempb.lenb++;
303     }
304 
305     c->flag=a->flag*b->flag;
306     c->lena=500;
307     while(!c->num[c->lena+499]&&c->lena>0) c->lena--;
308     c->lenb=500;
309     while((!c->num[500-c->lenb])&&c->lenb>0) c->lenb--;
310 }
311 #endif
My_decimal.h

  前端

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

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

猜你喜欢

转载自www.cnblogs.com/wawcac-blog/p/10229680.html