吐槽
丧心病狂的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
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
前端
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 }
发现自己还不会用github存代码时的表情