poj 1001
http://poj.org/problem?id=1001
这是一道高精度的运算,如果你之前有写过那种高精度的乘法的题目的话,做这个也还是比较简单的。、
思路:我是首先把小数点的位置确定下来,然后其他的数字不分一起运算,最后在添加小数点。
1 #include <stdio.h> 2 #include <iostream> 3 #include <string.h> 4 5 int nu[200],num[6]; 6 char inp[10]; 7 int n,loc; 8 9 int nc() //这一个就是高精度的乘法的算法用的。 10 { 11 int tmp[200]={0}; 12 for(int i=0;i<200;i++) 13 for(int m=0;m<=5;m++) 14 { 15 tmp[m+i]+=nu[i]*num[m]; 16 } 17 for(int i=0;i<200;i++) 18 { 19 if(tmp[i]>=100){ 20 tmp[i+2]+=tmp[i]/100; 21 tmp[i+1]+=(tmp[i]-(tmp[i]/100)*100)/10; 22 tmp[i]=tmp[i]%10; 23 } 24 else if(tmp[i]>=10){ 25 tmp[i+1]+=tmp[i]/10; 26 tmp[i]=tmp[i]%10; 27 } 28 nu[i]=tmp[i]; 29 } 30 return 0; 31 } 32 33 int main() 34 { 35 // freopen("in.txt","r",stdin); 36 while(scanf("%s%d",inp,&n)!=EOF) 37 { 38 memset(nu,0,sizeof(nu)); 39 int i,m; 40 for(i=0;inp[i]!='.';i++); //找出小数点的位置。 41 loc=(5-i)*n; 42 for(i=5,m=0;i>=0;i--,m++) 43 { 44 if(inp[i]=='.') m--; 45 else { 46 num[m]=inp[i]-'0'; 47 nu[m]=inp[i]-'0'; 48 } 49 } 53 for(i=1;i<n;i++) 54 nc(); 55 int mark=0,flog=0; 56 for(int i=0;i<=199;i++) //用来除去后导0的。 57 { 58 if(i==loc){ 59 mark=i; 60 flog=1; 61 break; 62 }if(nu[i]!=0){ 63 mark=i; 64 break; 65 } 66 } 67 // printf("%d\n",mark); 68 for(i=199,m=199;i>=mark;i--,m--) 69 { 70 if(nu[i]!=0&&i==m) m--; 71 if(i!=m) printf("%d",nu[i]); 72 if(i==loc||(loc>i&&i==m)) 73 { 74 if(!flog) printf("."); 75 m--; 76 } 77 } 78 printf("\n"); 79 } 80 return 0; 81 }