这题真是超级大模拟。好繁琐,自己写的打数加法,乘法,写的比我大一时候写的要好很多,大一是借助C++里面的string来写的,这把只用了C,浇一次就ac了,挺开心的,不过写了2个小时啊。注意零的处理。大体思路就是先找出有多少位小数,要提前处理掉后面补充位置的零,然后把这个数转换成整数,做n次方,然后输出时候再查一下点的位置输出就好了。

 #include <stdio.h>
#include <string.h>
#define mmax(a,b) (a)>(b):(a):(b)
void bigadd(char a[],char b[],char res[]){
int la=strlen(a),lb=strlen(b);
int i,j,t,sign;
char tmp[];
char zero[]="";
if(la<lb){
strcpy(tmp,a);
strcpy(a,b);
strcpy(b,tmp);
la=strlen(a);
lb=strlen(b);
}
for(i=la-,j=lb-;i>=&&j>=;--i,--j){
a[i]=a[i]+b[j]-'';
}
strcpy(zero+,a);
strcpy(a,zero);
for(i=strlen(a)-;i>;--i){
a[i-]+=(a[i]-'')/;
a[i]=(a[i]-'')%+'';
}
for(i=;i<strlen(a);++i){
if(a[i]!='') break;
}
if(i==strlen(a)) strcpy(res,"");
else strcpy(res,a+i);
return ;
}
void bigmul_one(char a[],char b,char res[]){
char zero[]="";
strcpy(zero+,a);
strcpy(a,zero);
int ji[];
int i,n=b-'',l=strlen(a);
for(i=;i<l;++i){
ji[i]=(a[i]-'')*n;
}
ji[]=;
for(i=l-;i>;--i){
ji[i-]=ji[i]/+ji[i-];
ji[i]=ji[i]%;
}
a[]='';
for(i=l-;i>=;--i){
a[i]=''+ji[i];
}
for(i=;i<l;++i){
if(a[i]!='') break;
}
if(i==l) strcpy(res,"");
else strcpy(res,a+i);
} void bigmul(char a[],char b[],char res[]){
int la,lb=strlen(b);
char r[];
char tmp[]="";
char zero[]="";
char t1[],t2[];
char aaa[];
char haha;
int i,j,t,cnt;
strcpy(res,"");
for(j=;j<lb;++j){
haha=b[j];
strcpy(t1,a);
bigmul_one(t1,haha,t2);// t2 = res;
for(i=j+;i<lb;++i) strcat(t2,"");
bigadd(res,t2,aaa);
strcpy(res,aaa);
}
// printf("res=%s\n",res);
}
int main(){
char a[],b[],res[];
char tt[];
int n,i,l;
int cnt;
int success;
while(~scanf("%s%d",a,&n)){
success=;
strcpy(res,""); l=strlen(a); for(i=l-;i>=;--i){
if(a[i]!='') break;
}
if(i<=) i=;
a[i+]='\0'; l=strlen(a); cnt=;
for(i=;i<l;++i)
if(a[i]=='.') break;
strcpy(a+i,a+i+);
cnt=l--i;
if(cnt<) cnt=;
cnt=cnt*n;
for(i=;i<=n;++i){
strcpy(b,a);
bigmul(res,b,tt);
strcpy(res,tt);
}
l=strlen(res);
if(cnt>=l){
printf(".");
for(i=;i<cnt-l;++i) printf("");
printf("%s\n",res); }else{
for(i=;i<l;++i){
printf("%c",res[i]);
if(i+==l-cnt&&i+!=l) printf(".");
}
printf("\n");
} }
return ;
}

poj1001_Exponentiation的更多相关文章

随机推荐

  1. Hololens开发笔记之使用Unity开发一个简单的应用

    一.Hololens概述 Hololens有以下特性 1.空间映射借助微软特殊定制的全息处理单元(HPU),HoloLens 实现了对周边环境的快速扫描和空间匹配.这保证了 HoloLens能够准确地 ...

  2. No matching bean of type [xx] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency

    这个看起来很弱爆的问题其实是因为其他的配置文件中已经出现了为xx定义好的注入.如果用@Autowired就会得到上面的错误 , 但是用@Resource的时候就会看到类似下面的错误 Bean name ...

  3. Document root element "configuration", must match DOCTYPE root "mapper".

    最近剛剛鼓搗mybatis , 第一個demo就出了問題.其實原因是因為將mapper中的頭copy到了configuration里去了 <?xml version="1.0" ...

  4. centos6.4搭建基于ftp的yum源让本地局域网服务器使用

    1. 挂载centos6.4 DVD镜像[root@centos64 ~]# mount /dev/cdrom /mnt 2. 安装vsftp软件,启动vsftpd服务,拷贝centos6.4 DVD ...

  5. POJ 3422 Kaka's Matrix Travels 【最小费用最大流】

    题意: 卡卡有一个矩阵,从左上角走到右下角,卡卡每次只能向右或者向下.矩阵里边都是不超过1000的正整数,卡卡走过的元素会变成0,问卡卡可以走k次,问卡卡最多能积累多少和. 思路: 最小费用最大流的题 ...

  6. I/B/P SP/SI

    H264中I.B.P帧 I帧:只作为参考帧,采用帧内预测 B帧:以其前面的I帧或P帧和后面的P帧作为参考帧 P帧:只能以前面的I帧或P帧作为参考帧 H264中的SP SI SP和SI是H264中引入的 ...

  7. MFC学习 修改窗口样式

    1. 在PreCreateWindow中可用CREATESTRUCT cs, cs.lpszName修改窗口标题, cs.lpszClass = AfxRegisterWndClass 修改图标与样式 ...

  8. JAVA集合学习

    JAVA中有几种常用的集合类.分别是List,Set,Map等 提示:Eclipse中自动导入包的快捷键  Ctrl+Shift+O 一.List类 父接口:该类是Collection集合接口的子接口 ...

  9. SVN+FTP服务器搭建(一)——SVN安装配置篇

    Subversion是一个自由,开源的版本控制系统.在Subversion管理下,文件和目录可以超越时空.Subversion将文件存放在中心版本库里.这个版本库很像一个普通的文件服务器,不同的是,它 ...

  10. Quick Sort(快排)

    这是挖坑填补法的演示 快排之挖坑填补法: void Quick(int top/*起始位置*/,int end/*末尾位置*/,int arr[])//挖坑填补法 { int i=top,j=end, ...