输入输出格式 Input/output
输入格式:
三行:
三行:
第一行:被除数
第二行:除数
第三行:一个数s,表示保留小数点后s位
输出格式:
一行数,表示计算的结果(不可以有前导0)
输出格式:
一行数,表示计算的结果(不可以有前导0)
标签:
1 #include <stdio.h> 2 #include <string.h> 3 #define MaxLength 99999 4 int x,q;//q是备份余数用的 5 void output(int c[])//倒序输出函数 6 { 7 int i; 8 for(i=c[0];i>=1;i--) 9 printf("%d",c[i]); 10 } 11 /*============================================================================*/ 12 void div(char strA[],int b,int c[])//高精度数a除以整数b,结果保存在c。 13 { 14 int a[MaxLength],i,lena,lenc,j,t; 15 memset(a,0,sizeof(a)); 16 memset(c,0,sizeof(c)); 17 if(b==0) 18 { 19 c[0]=1; 20 c[1]=0; 21 return ; 22 } 23 lena=strlen(strA); 24 for(i=0;i<lena;i++) //把串strA正序存储到数组a 25 a[i+1]=strA[i]-‘0‘; 26 x=0; 27 for(i=1;i<=lena;i++) //按位相除 28 { 29 c[i]=(x*10+a[i])/b; 30 x=(x*10+a[i])%b; 31 } 32 lenc=1; 33 while(c[lenc]==0&&lenc<lena) //高位可能会有一些无意义的0,需要把lenc定好位 34 lenc++; 35 c[0]=lena-lenc+1; 36 for(j=1;j<=c[0];j++) //把数组c整体左移,也就是把前缀0给覆盖掉 37 { 38 c[j]=c[lenc]; 39 lenc++; 40 } 41 for(i=1,j=c[0];i<j;i++,j--) 42 { 43 t=c[i];c[i]=c[j];c[j]=t; 44 } 45 q=x;//备份一下余数 46 output(c);//传入输出函数 47 } 48 /*============================================================================*/ 49 int main() 50 { 51 char a[MaxLength]; 52 int b[MaxLength]; 53 int i,k; 54 long long s,n; 55 gets(a); 56 scanf("%I64d",&n); 57 scanf("%d",&s); 58 div(a,n,b); 59 printf("."); 60 for(i=0;i<s;i++)//小数点后s位 61 { 62 x=x*10; 63 k=x/n; 64 printf("%d",k); 65 x=x-n*k; 66 } 67 printf("\n%d\n",q); 68 return 0; 69 }
标签:
原文地址:http://www.cnblogs.com/geek-007/p/4356348.html