![]() |
#2
xry1232016-02-10 14:56
#include<iostream>
#include<cmath> #include<cstring> using namespace std; int main() { char A[100]; int n,i,j,k,flag,C[128],D[128],l,M[128],o,len,cnt,a,b,flag2,flag3,flag4; for (;cin>>A>>n;){ //整体思想是不管小数点看成整数计算,然后在加小数点,即看成n乘以10的负x次方 j=strlen(A); flag=0; flag2=0; flag4=0; memset(C,0,sizeof(C)); memset(M,0,sizeof(M)); memset(D,0,sizeof(D)); for (j=j-1;j>=0;j--) if (A[j]!='0'&&A[j]!='.'){ //为了去掉后面多余的0的影响 flag3=j; break; } for (i=0,l=0;i<=flag3;i++) //字符转成整形 { if (A[i]!='0'&&A[i]!='.') flag2=1; if (flag2){ if (A[i]==48){C[l]=0;l++;} if (A[i]==49){C[l]=1;l++;} if (A[i]==50){C[l]=2;l++;} if (A[i]==51){C[l]=3;l++;} if (A[i]==52){C[l]=4;l++;} if (A[i]==53){C[l]=5;l++;} if (A[i]==54){C[l]=6;l++;} if (A[i]==55){C[l]=7;l++;} if (A[i]==56){C[l]=8;l++;} if (A[i]==57){C[l]=9;l++;} } if (A[i]=='.'){ flag=i; flag4=1; } } b=n*(flag3-flag); //计算x的值 for (k=0;k<l;k++) D[k]=C[k]; len=l-1; for (cnt=1;cnt<n;cnt++) //计算部分 { for (l=i-1,o=127;l>=0;l--,o--) for (a=len;a>=0;a--){ M[o-(len-a)]+=C[l]*D[a]; if (M[o-(len-a)]>=10) { M[o-(len-a)-1]+=M[o-(len-a)]/10; M[o-(len-a)]=M[o-(len-a)]%10; } } for (o=0,l=0,flag=0;o<=127;o++) { if (M[o]!=0) { flag=1; } if (flag) { C[l]=M[o]; l++; } } i=l; memset(M,0,sizeof(M)); } for (l;l>=0;l--) //删去计算后的后面多余的0 if (C[l]!=0) { flag=l; break; } if (flag4){ //有小数点 if (b<=l) //结果大于1 { a=l-b; for (k=0;k<=flag;k++) { cout<<C[k]; if (k==a) cout<<'.'; } cout<<endl; } else { a=b-l; cout<<'.'; for (k=0;k<a-1;k++) cout<<'0'; for (k=0;k<=flag;k++) cout<<C[k]; cout<<endl; } } else //输入是整数 { for (k=0;k<=flag;k++) { cout<<C[k]; } cout<<endl; } } return 0; } 带了点注释 |
#include<iostream>
#include<cmath>
#include<cstring>
using namespace std;
int main()
{
char A[100];
int n,i,j,k,flag,C[128],D[128],l,M[128],o,len,cnt,a,b,flag2,flag3,flag4;
for (;cin>>A>>n;){
if (n%2==0)
cnt=n;
else
cnt=n-1;
j=strlen(A);
flag=0;
flag2=0;
flag4=0;
memset(C,0,sizeof(C));
memset(M,0,sizeof(M));
memset(D,0,sizeof(D));
for (j=j-1;j>=0;j--)
if (A[j]!='0'&&A[j]!='.'){
flag3=j;
break;
}
for (i=0,l=0;i<=flag3;i++)
{
if (A[i]!='0'&&A[i]!='.')
flag2=1;
if (flag2){
if (A[i]==48){C[l]=0;l++;}
if (A[i]==49){C[l]=1;l++;}
if (A[i]==50){C[l]=2;l++;}
if (A[i]==51){C[l]=3;l++;}
if (A[i]==52){C[l]=4;l++;}
if (A[i]==53){C[l]=5;l++;}
if (A[i]==54){C[l]=6;l++;}
if (A[i]==55){C[l]=7;l++;}
if (A[i]==56){C[l]=8;l++;}
if (A[i]==57){C[l]=9;l++;}
}
if (A[i]=='.'){
flag=i;
flag4=1;
}
}
b=n*(flag3-flag);
for (k=0;k<l;k++)
D[k]=C[k];
len=l-1;
for (cnt=1;cnt<n;cnt++)
{
for (l=i-1,o=127;l>=0;l--,o--)
for (a=len;a>=0;a--){
M[o-(len-a)]+=C[l]*D[a];
if (M[o-(len-a)]>=10)
{
M[o-(len-a)-1]+=M[o-(len-a)]/10;
M[o-(len-a)]=M[o-(len-a)]%10;
}
}
for (o=0,l=0,flag=0;o<=127;o++)
{
if (M[o]!=0)
{
flag=1;
}
if (flag)
{
C[l]=M[o];
l++;
}
}
i=l;
memset(M,0,sizeof(M));
}
for (l;l>=0;l--)
if (C[l]!=0)
{
flag=l;
break;
}
if (flag4){
if (b<=l)
{
a=l-b;
for (k=0;k<=flag;k++)
{
cout<<C[k];
if (k==a)
cout<<'.';
}
cout<<endl;
}
else
{
a=b-l;
cout<<'.';
for (k=0;k<a-1;k++)
cout<<'0';
for (k=0;k<=flag;k++)
cout<<C[k];
cout<<endl;
}
}
else
{
for (k=0;k<=flag;k++)
{
cout<<C[k];
}
cout<<endl;
}
}
return 0;
}
代码很麻烦,在此谢过各位大神了