注意学会使用函数,模板化使主程序尽可能简单,这样写思路更明确
findPointPos();reverse();mutiply();
注意事项:
①使用字符操作,一定要添加字符串结束符
②学会使用标准输入输出重定向,这样操作更方便一些freopen();
#include <stdio.h> #include <string.h> #define M 200 int findPointPos(char a[]) { int alen=strlen(a); for(int i=0;i<alen;i++) if(a[i]=='.') return i; return -1; } void reverse(char a[]) { int alen=strlen(a); for(int i=0;i<alen/2;i++) { char temp=a[alen-1-i]; a[alen-1-i]=a[i]; a[i]=temp; } } void multiply(char a[],char b[],char c[]) { int alen,blen; int q; alen=strlen(a); blen=strlen(b); for(int i=0;i<alen;i++) { q=0; for(int j=0;j<blen;j++) { int p=(b[j]-'0')*(a[i]-'0')+c[i+j]-'0'+q;//###,c[i+j]必须为字符型 c[i+j]=p%10+'0'; q=p/10; } if(q!=0) c[i+blen]=q+'0'; } if(q==0)//###,必须加结束符 c[alen+blen-1]='\0'; else c[alen+blen]='\0'; } int main() { freopen("748.in","r",stdin); freopen("748.out","w",stdout); char result[M],temp_result[M]; char a[10],temp[10]; int pointBit,n; while(scanf("%s%d",a,&n)==2) { int i; int alen=strlen(a); pointBit=alen-findPointPos(a)-1; int c=0; for(i=0;i<alen;i++) if(a[i]!='.') temp[c++]=a[i]; temp[c]='\0'; int u=0; while(u<c && temp[u]=='0')//###,0 为 字符型 u++; for(i=u;i<c;i++) a[i-u]=temp[i]; a[i-u]='\0'; reverse(a); strcpy(result,a); for(i=2;i<=n;i++) { strcpy(temp_result,result); memset(result,'0',sizeof(result)); multiply(a,temp_result,result); } reverse(result); pointBit*=n; int rlen=strlen(result); for(i=rlen-1;i>=0;i--) { if(result[i]!='0') break; else result[i]='-'; } if(rlen>pointBit) { for(i=0;i<rlen-pointBit;i++) printf("%c",result[i]); printf("."); for(;i<rlen;i++) if(result[i]=='-') break; else printf("%c",result[i]); } else { printf("."); for(i=0;i<pointBit-rlen;i++) printf("0"); for(i=0;i<rlen;i++) printf("%c",result[i]); } printf("\n"); } return 0; }