博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
高精度库(支持小数、负数、整数、判断质数、阶乘、孪生质数等)
阅读量:4621 次
发布时间:2019-06-09

本文共 27616 字,大约阅读时间需要 92 分钟。

吐槽

  丧心病狂的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
5 #include
6 #include
7 #include
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("\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
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
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]
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 else137 {138 n2->flag=1;139 sub(n1,n2,n3);140 n2->flag=-1;141 return;142 }143 }144 //同号145 n3->len=(n1->len
len)?n2->len:n1->len;146 for(i=0;i
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)-3160 {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-b191 c->len=Max(a->len,b->len);192 for(i=0;i
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
len;i++)208 {209 for(j=0;j
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 {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\n\n");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 else314 {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:\t( ",tot);output(&i1);printf("\t\t\t, ");output(&i2);printf("\t\t)\n");328 }329 i1=i2;330 i2.num[0]+=2;331 carry(&i2);332 }333 if(!tot) printf("Not Found\n\n");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
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
5 #include
6 #include
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("\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 } 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
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]
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 else164 {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)-3193 {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-b224 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\n");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
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("找不到文件!\n"); 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\n"); 37 scanf("%d", &i); 38 if (i == 1) 39 { 40 printf("~请选择整数运算~\n计算a+b请输入1"); 41 printf("\n计算a-b请输入2"); 42 printf("\n计算a*b请输入3"); 43 printf("\n计算a/b请输入4"); 44 printf("\n计算a的阶乘请输入5"); 45 printf("\n计算孪生质数请输入6\n"); 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("\n"); 72 if (ff) 73 { 74 usescreen_out(); 75 printf("完成!\n"); 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("\n");103 if (ff)104 {105 usescreen_out();106 printf("完成!\n");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("\n");134 if (ff)135 {136 usescreen_out();137 printf("完成!\n");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("\n");167 if (ff)168 {169 usescreen_out();170 printf("完成!\n");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("\n");188 if (ff)189 {190 usescreen_out();191 printf("完成!\n");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...\n");208 if (ff)209 usefile_out();210 twins_prime(&n1, &n2);211 if (ff)212 usescreen_out();213 printf("孪生质数计算完成!\n");214 }215 }216 else if (i == 2)217 {218 printf("~请选择小数运算~\n计算a+b请输入1");219 printf("\n计算a-b请输入2");220 printf("\n计算a*b请输入3");221 printf("\n计算a/b请输入4\n");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("\n");249 if (ff)250 {251 usescreen_out();252 printf("完成!\n");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("\n");281 if (ff)282 {283 usescreen_out();284 printf("完成!\n");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("\n");313 if (ff)314 {315 usescreen_out();316 printf("完成!\n");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("\n");347 if (ff)348 {349 usescreen_out();350 printf("完成!\n");351 }352 }353 }354 else355 {356 printf("错误");357 continue;358 }359 if (ffin)360 {361 printf("Done!\n");362 return 0;363 }364 printf("*****退出程序请输入:0,继续请输入:1*****\n");365 scanf("%d", &i);366 if (i == 1)367 continue;368 else369 break;370 }371 return 0;372 }
main.cpp

 

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

转载于:https://www.cnblogs.com/wawcac-blog/p/10229680.html

你可能感兴趣的文章
opencms忘记Admin用户登录密码解决方案
查看>>
forms组件
查看>>
create-react-app 配置sass
查看>>
02_关系数据库
查看>>
在win7电脑中如何查看运行进程的PID标识符
查看>>
[Vue] vue-cli3.0安装
查看>>
C++学习之字符串
查看>>
图像化列表
查看>>
2014年10月9日——语言基础2
查看>>
mysql查
查看>>
[正则表达式]难点和误区
查看>>
217. Contains Duplicate
查看>>
hadoop遇到问题总结
查看>>
Windows下手动安装redis服务
查看>>
把 MongoDB 当成是纯内存数据库来使用(Redis 风格)
查看>>
PyTorch 1.0 中文官方教程:使用ONNX将模型从PyTorch传输到Caffe2和移动端
查看>>
LeetCode 4Sum
查看>>
BBC-The Race and a quiz
查看>>
大端小端
查看>>
IntelliJ IDEA 把java项目导出成可执行的jar
查看>>