HDOJ 1063 && POJ 1001

來源:互聯網
上載者:User

HDOJ1063和POJ1001是相同的題目,但是就此題而言,POJ的資料要弱於HDOJ。

此題是高精度冪運算,在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++;}elsebreak;}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++;}elsebreak;}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]);}elseprintf("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;}}

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.