poj1001_Exponentiation
这题真是超级大模拟。好繁琐,自己写的打数加法,乘法,写的比我大一时候写的要好很多,大一是借助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的更多相关文章
随机推荐
- [物理学与PDEs]书中一些对数学研究有用的引理
P 35--38 1. 若 ${\bf B}$ 为横场 ($\Div{\bf B}=0\ra {\bf k}\cdot {\bf B}=0\ra $ 波的振动方向与传播方向平行), 则 $$\bex ...
- java中四种引用类型(转)
今天看代码,里面有一个类java.lang.ref.SoftReference把小弟弄神了,试想一下,接触java已经有3年了哇,连lang包下面的类都不了解,怎么混.后来在网上查资料,感觉收获颇多, ...
- jquery判断checkbox是否选中及改变checkbox状态[转]
jquery判断checked的三种方法: .attr('checked): //看版本1.6+返回:”checked”或”undefined” ;1.5-返回:true或false .prop('c ...
- 在linux下通过sh运行java程序
1.导出jar包放在目录下,如/home 2.通过vi创建sh文件如:test.sh,内容如:java -jar test1.jar com.wzh.test.test & 3.运行命令:sh ...
- http 303 307 302 状态码理解
最近在看 <<the rails4 way>> 书中提到了这几个状态码,网上搜到几篇文章 http://www.cnblogs.com/cswuyg/p/3871976.htm ...
- Ulipad和有道词典冲突的问题
Ulipad和目前版本的有道词典有冲突,表现为先开有道词典,Ulipad就无法运行. 解决方法是:找到Ulipad安装目录下的config.ini,添加以下两行: [server] port=50 ...
- [Java] 对象排序示例
package test.collections; import java.util.ArrayList; import java.util.Collection; import java.util. ...
- js中格式化时间字符串
.net 程序员肯定有遇到过,将一个对象json序列化之后Date 字段 就会转化成 '/Date(1370770323740)/' 这种格式的数据,下面介绍一种在js中,关于时间格式的转换. < ...
- VisualVM连接远程Java进程
jstatd是一个RMI(Remove Method Invocation)的server应用,用于监控jvm的创建和结束,并且提供接口让监控工具(如VisualVM)可以远程连接到本机的jvms . ...
- Fragment和Activity的区别
Fragment用来描述一些行为或一部分用户界面在一个Activity中,可以合并多个Fragment在一个单独的Activity中建立多个UI面板,同时重用Fragment在多个activity中. ...