标签:
Description
Input
Output
Sample Input
95.123 12 0.4321 20 5.1234 15 6.7592 9 98.999 10 1.0100 12
Sample Output
548815620517731830194541.899025343415715973535967221869852721 .00000005148554641076956121994511276767154838481760200726351203835429763013462401 43992025569.928573701266488041146654993318703707511666295476720493953024 29448126.764121021618164430206909037173276672 90429072743629540498.107596019456651774561044010001 1.126825030131969720661201
#include<iostream> #include<stdio.h> using namespace std; int main() { char a[10]; int n; while(cin>>a>>n){ int b=0,c[250]={0},i,j,x,flag=0; c[249]=1; for(i=0;a[i]!=‘\0‘;i++) { if(a[i]==‘.‘) { x=i; //x为小数点所在的位置 flag=1; continue; } b=b*10+a[i]-‘0‘; //b为a[10]去掉小数点后的整型数字 } x=i-x-1; //x为小数部分的位数 for(i=1;i<n+1;i++) { for(j=0;j<250;j++) c[j]*=b; for(j=249;j>=0;j--) if(c[j]>=10) { c[j-1]+=c[j]/10; c[j]%=10; } } if(flag==0) { for(i=0;c[i]==0;i++); //i为c[250]中才首位开始判断 不是0的那一位 for(;i<250;i++) cout<<c[i]; //无小数部分时直接输出c[250],无需考虑小数点 } else if(a[0]==‘0‘) //只有小数部分时 { flag=0; //整数部分为0,不输出 for(j=i;j<250;j++) if(c[j]!=0) { flag=1; break; //利用flag的值来判断结果是否存在小数部分 } if(flag==1) { cout<<"."; for(j=249;c[j]==0&&j>=i;j--); //去掉小树部分最后多余的0 for(i=250-n*x;i<=j;i++) cout<<c[i]; } } else //既有小数部分也有整数部分 { flag=0; for(i=0;c[i]==0;i++); for(;i<250-n*x;i++) //小数部分一共是n*x位,之前全为整数部分 cout<<c[i]; for(j=i;j<250;j++) if(c[j]!=0) { flag=1; break; //此处 同上述只有小数部分的情况 } if(flag==1) { cout<<"."; for(j=249;c[j]==0&&j>=i;j--); for(;i<=j;i++) cout<<c[i]; } } cout<<endl; } system("pause"); return 0; }
标签:
原文地址:http://www.cnblogs.com/farewell-farewell/p/5185342.html