吐槽
丧心病狂的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……)
我快期末考了,高数还在挂科边缘挣扎,就不多说,直接上代码吧
源代码
后端
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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
前端
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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 }
发现自己还不会用github存代码时的表情