HDOJ 1063 && POJ 1001
2011-07-05 13:55
337 查看
HDOJ1063和POJ1001是相同的题目,但是就此题而言,POJ的数据要弱于HDOJ。
此题是高精度幂运算,在POJ上能AC的代码却在HDOJ上AC不了,后来仔细阅读题目才发现,程序中没有处理前导0的部分,就是说001.01得处理为1.01。
经过实际测试,加上处理前导0的功能,既可以在HDOJ上AC,也可以在POJ上AC;如果不加处理前导0的功能,只能在POJ上AC。这就是许多像我一样的同学的代码在HDOJ上通不过的原因。
下面是在HDOJ上可AC代码:
此题是高精度幂运算,在POJ上能AC的代码却在HDOJ上AC不了,后来仔细阅读题目才发现,程序中没有处理前导0的部分,就是说001.01得处理为1.01。
经过实际测试,加上处理前导0的功能,既可以在HDOJ上AC,也可以在POJ上AC;如果不加处理前导0的功能,只能在POJ上AC。这就是许多像我一样的同学的代码在HDOJ上通不过的原因。
下面是在HDOJ上可AC代码:
#include <stdio.h> #include <string.h> void add(char temp1[],char temp2[],int m); //两大数相加 void mul(char des[],char src[]); //两大数相乘 void reverse(char *src); //字符串逆置 void process1(char des[],int m); //处理带小数的情况 void process2(char des[],int m); //处理纯小数的情况 int leading_zeros(char r[]); //将前导0去掉,返回前导0的个数 int main() { char des[1024],src[1024],r[8]; int n,i,j,flag,m,t,count; while(scanf("%s %d",r,&n)!=-1) { count=leading_zeros(r); t=6-count; flag=0;//整数 for(j=0,i=0;i<t;i++) { if(r[i]=='.') { flag=1;//带小数 m=t-1-i; continue; } src[j]=r[i]; j++; } m=m*n; src[j]='\0'; if(src[0]=='0') { flag=2;//纯小数 for(i=0;i<t-2;i++) src[i]=src[i+1]; src[i]='\0'; } reverse(src); strcpy(des,src); for(i=1;i<n;i++) { mul(des,src); } if(flag==0) { reverse(des); printf("%s\n",des); } else if(flag==1) { process1(des,m); } else { process2(des,m); } } return 0; } int leading_zeros(char r[]) { int t,count,i; for(i=0;i<6;i++) { if(r[i]=='0'&&r[i+1]!='.') continue; break; } count=i; t=6-count; for(i=0;i<t;i++) r[i]=r[i+count]; r[i]='\0'; return count; } void process1(char des[],int m) { int i,n,count=0,t; n=strlen(des); for(i=0;i<m;i++) { if(des[i]=='0') { count++; } else break; } t=n-m; reverse(des); des[n-count]='\0'; n=strlen(des); for(i=0;i<t;i++) { printf("%c",des[i]); } if(t!=n) printf("."); for(i=t;i<n;i++) printf("%c",des[i]); printf("\n"); } void process2(char des[],int m) { int i,n,count=0,t; n=strlen(des); for(i=0;i<n;i++) { if(des[i]=='0') { count++; } else break; } t=m-n; reverse(des); des[n-count]='\0'; n=strlen(des); if(n!=0) { printf("."); for(i=0;i<t;i++) printf("0"); for(i=0;i<n;i++) printf("%c",des[i]); } else printf("0"); printf("\n"); } void mul(char des[],char src[]) { char temp1[1024],temp2[1024]; int n,m,i,j,a,b,t; n=strlen(src); m=strlen(des); for(i=0;i<1024;i++) temp1[i]=temp2[i]='\0'; for(i=0;i<n;i++) { a=b=0; for(j=0;j<m;j++) { t=(des[j]-'0')*(src[i]-'0')+a; a=t/10; b=t%10; temp2[j]=b+'0'; } if(a!=0) { temp2[j]=a+'0'; temp2[j+1]='\0'; } else { temp2[j]='\0'; } add(temp1,temp2,i); } strcpy(des,temp1); } void add(char temp1[],char temp2[],int m) { char temp[1024]; int n1,n2,i,a,b,t; n1=strlen(temp1); n2=strlen(temp2); if(m!=0) { for(i=n2+m-1;i>=m;i--) temp2[i]=temp2[i-m]; for(i=m-1;i>=0;i--) temp2[i]='0'; temp2[n2+m]='\0'; } n2=strlen(temp2); a=b=0; if(n1<n2) { for(i=0;i<n1;i++) { t=temp1[i]-'0'+temp2[i]-'0'+a; a=t/10; b=t%10; temp[i]=b+'0'; } for(i=n1;i<n2;i++) { t=temp2[i]-'0'+a; a=t/10; b=t%10; temp[i]=b+'0'; } if(a!=0) { temp[i]=a+'0'; temp[i+1]='\0'; } else { temp[i]='\0'; } } else { for(i=0;i<n2;i++) { t=temp1[i]-'0'+temp2[i]-'0'+a; a=t/10; b=t%10; temp[i]=b+'0'; } for(i=n2;i<n1;i++) { t=temp2[i]-'0'+a; a=t/10; b=t%10; temp[i]=b+'0'; } if(a!=0) { temp[i]=a+'0'; temp[i+1]='\0'; } else { temp[i]='\0'; } } strcpy(temp1,temp); } void reverse(char *src) { int i,n,m; char t; n=strlen(src); m=n/2; for(i=0;i<m;i++) { t=src[i]; src[i]=src[n-i-1]; src[n-i-1]=t; } }
相关文章推荐
- HDU 1063 Exponentiation&&POJ 1001 Exponentiation
- HDU 1063 && POJ 1001 Exponentiation (JAVA浮点数大数)
- poj 1001 && hdu 1063 (java版本)
- hdoj1063&&poj1001 Exponentiation(大数据的处理,浮点数的幂高精确度表示)
- Hdu 1063 & Poj 1001 Exponentiation (java 高精度实数 去除首尾0)
- hdoj 1542 && poj 1151 Atlantis && poj 1389 Area of Simple Polygons 【线段树 + 离散化 + 扫描线】
- hdu 1063&&poj 1001
- HDU 1063/POJ 1001-Exponentiation(大数类)
- 【后缀数组】 HDOJ 2459 && POJ 3693 Maximum repetition substring
- hdoj_1102Constructing Roads(最小生成树)&& poj_2485Highways
- 【线段树+扫描线】 HDOJ 1828 && POJ 1177 Picture
- POJ 1521 && HDOJ 1053
- POJ 2892 Tunnel Warfare && HDOJ 1540 (线段树)
- hdoj_2586How far away ? && poj_1986Distance Queries
- POJ-1063 Flip and Shift 数学分析&运用守恒定理
- hdoj 1454&&poj 1039 Pipe 1454 (数学计算几何) 枚举
- hdoj_1102Constructing Roads(最小生成树)&& poj_2485Highways
- hdoj_2586How far away ? && poj_1986Distance Queries
- poj 3696 &&hdoj 2462 The Luckiest number(同余&欧拉) 好题
- hdoj&nbsp;acm&nbsp;&nbsp;1001