⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 multiplydouble.c

📁 计算阶乘的程序。 在内核为2.6.23.1-4的红旗LINUX下成功运行
💻 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 + -