📄 multiplydouble.c
字号:
#include <stdio.h>#include <stdlib.h>#define M 1.0e+256#define N 33554432Lunsigned int multiply(unsigned int n, double *result, unsigned int highest);void print(double *outdata, unsigned int highest);int main(int argc, char *argv[]){ unsigned int i = 0, n =0, highest = 0; double *data; data = malloc(N); *data = 1.0; if(argc != 2) { printf("The Parameter is wrong\n"); exit(1); } else { while(*(argv[1] + i) != '\0') { if((*(argv[1] + i) <= 0x39) && (*(argv[1] + i) >= 0x30)) i++; else { printf("The Parameter is wrong\n"); exit(1); } } } n = atoi(argv[1]); printf("The %d! = ", n); for(i = 2; i <= n; i++) highest = multiply(i, data, highest); print(data, highest); free(data); exit(0);}unsigned int multiply(unsigned int n, double *result, unsigned int highest){ double tmp; double carrier = 0.0; unsigned int i, e = 0; for(i = 0; i <= highest; i++) { tmp = n; tmp *= *(result + i); tmp += carrier; if(tmp > M) { e = (unsigned int)(tmp / M); carrier = e; *(result + i) = tmp - carrier*M; } else { carrier = 0.0; *(result + i) = tmp; } } if(carrier) *(result + (++highest)) = carrier; return highest;}void print(double *outdata, unsigned int highest){ FILE *Buff; FILE *Buff1; unsigned char data[300]; unsigned char data1[300]; unsigned char *index; unsigned int index1, b, c, t; if(highest == 0) printf("%.255e", *(outdata + highest)); else { Buff = fopen("./out", "w+"); Buff1 = fopen("./out1", "w+"); fprintf(Buff,"%.255e", *(outdata + highest)); fprintf(Buff1,"%.255e", *(outdata + highest - 1)); fclose(Buff); fclose(Buff1); Buff = fopen("./out", "r"); Buff1 = fopen("./out1", "r"); fread(data, sizeof(unsigned char), 300, Buff); fread(data1, sizeof(unsigned char), 300, Buff1); index = data + 259; index1 = atoi(index); data[index1 + 2] = data[index1 + 2] + data1[0] - 0x30; data[index1 + 3] = data[index1 + 3] + data1[2] - 0x30; for(b = index1 + 4, c = 3; b <= 257; b++, c++) data[b] += data1[c] - 0x30; printf("%.257s",data); if(highest == 1) data1[259] = '\0'; else data1[257] = '\0'; printf("%s",data1 + c); fclose(Buff1); if(highest > 1) { for(t = highest - 2; t >= 0 ; t--) { Buff1 = fopen("./out1", "w+"); fprintf(Buff1,"%.255e", *(outdata + t)); fclose(Buff1); Buff1 = fopen("./out1", "r"); fread(data1, sizeof(unsigned char), 300, Buff1); fclose(Buff1); printf("%c",data[0]); printf("%c",data[2]); if(t != 0) data1[257] = '\0'; else { data1[259] = '\0'; printf("%s",data1 + 3); break; } printf("%s",data1 + 3); } } printf("%u", index1 + highest*256); fclose(Buff); remove("./out"); remove("./out1"); } printf("\n");}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -