| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
Re:数据都通过了,怎么不能接受,求高手指点In Reply To:数据都通过了,怎么不能接受,求高手指点 Posted by:wangminqian at 2009-02-23 23:38:01 > #include"stdio.h"
> #include"string.h"
> #include"stdlib.h"
> char result1[500]={'\0'};//结果
> int result[500]={0};
>
> void reverse(char chr[],int l){
> //颠倒数组
>
> int i;
> char temp;
> for(i=0;i <= l/2;i++){
> temp=chr[i];
> chr[i]=chr[l-i];
> chr[l-i]=temp;
> }
> }
>
> char* multiple(char a[],char b[]){
>
> unsigned int la,lb;
> unsigned int i,j;
> unsigned int lresult=0;
> la=strlen(a)-1;
> lb=strlen(b)-1;
>
> reverse(a,la);
> reverse(b,lb);
>
> for(i=0;i <= la;i++)
> for(j=0;j <= lb;j++){
> //精华所在
>
> result[i+j]+=(a[i]-48)*(b[j]-48);
> result[i+j+1]+=result[i+j]/10;
> result[i+j]%=10;
> }
> lresult=i+j+1;
> while(result[lresult] == 0) lresult--;
>
> if(lresult < 0 ){result[0]=0;lresult=0;}
>
> for(i=0;i<=lresult;i++)
> {result[i]+=48;
> result1[i]=(char)result[i];
> }
> result1[i]=0;
> reverse(result1,lresult);
>
> return result1;
> }
>
>
> void main()
> {
> char b[6];//整数的字符串
> char a[7];//输入的浮点数
> unsigned int n,i,j=0;
> unsigned int e=0;//整数位数
> char c[500];//result1的拷贝
> char t[500];//c的拷贝
> char x[500];//最终输出
> while(scanf("%s %d",a,&n)==2)
> {
> for(i=0;i<strlen(a);i++) //小数转换为整数
> if(a[i]=='.')break;
> e=i;
> for(i=0;i<strlen(a);i++)
> {
> if(a[i]=='.')j++;//j为小数点个数
> }
> for(i=0;i<strlen(a);i++)
> if((a[i]>='0'&&a[i]<='9')||(a[i]='.'));//字符串由数字和小数点组成
> else
> exit(0);
> if(j<=1&&a[0]!='.')//小数点数目少于一个且不再第一位
> {if(a[0]=='0'&&a[1]!='.')exit(0);}//0在第一位第2位是小数点
> else exit(0);
> for(i=0;i<strlen(a);i++)
> {
> if(i>=e)b[i]=a[i+1];
> else b[i]=a[i];
> }
> b[i]='\0';
>
> if(n==1)strcpy(c,b);
> for(i=2;i<=n;i++)
> {
> if(i==2){
> strcpy(t,b);
> strcpy(c,multiple(b,t));
> strcpy(t,c);
> memset(result1,0,sizeof(result1));
> memset(result,0,sizeof(result));
> }
> else {
> memset(c,0,sizeof(c));
> reverse(b,strlen(b)-1);//每进行一次运算,b都被颠倒一次
> strcpy(c,multiple(b,t));
> memset(t,0,sizeof(t));
> strcpy(t,c);
> memset(result1,0,sizeof(result1));
> memset(result,0,sizeof(result));
> }
> }
>
> if(n*(strlen(b)-e)>=strlen(c))
> {
> for(i=0;i<=n*(strlen(b)-e)+1;i++)
> {if(i==0)x[i]='.';
> if(i>0&&i<=n*(strlen(b)-e)-strlen(c))x[i]='0';
> if(i>n*(strlen(b)-e)-strlen(c))
> x[i]=c[i-(n*(strlen(b)-e)-strlen(c))-1];
> }
> }
> else{
> for(i=0;i<=strlen(c);i++)
> {if(i>strlen(c)-n*(strlen(b)-e))x[i]=c[i-1];
> if(i==strlen(c)-n*(strlen(b)-e))x[i]='.';
> if(i<strlen(c)-n*(strlen(b)-e))x[i]=c[i];
> }
> x[i]='\0';
> }
>
> for(i=0;i<strlen(x);i++)
> if(x[i]=='.')break;
> j=strlen(x)-1;
> while(1)
> {if(x[j]=='0'&&j>i){x[j]='\0';j--;}
> else break;
> }
> if(x[0]=='0'&&x[1]=='.')i=1;
> else i=0;
> while(i<=j){
> if(i==strlen(x)-1&&x[i]=='.')x[i]='\0';
> printf("%c",x[i]);
> i++;
> }
> printf("\n");
> memset(a,0,sizeof(a));
> n=0;
> j=0;
> }
> }
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator