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的更多相关文章
随机推荐
- CSS背景属性Background详解
[转] 本文详解了CSS的背景属性Background,包括CSS3中新增的背景属性.如果你是个CSS初学者,还可以查看之前介绍的CSS浮动属性和CSS透明属性详解. CSS2 中有5个主要的背景(b ...
- ERWin & ERStudio图里的实线和虚线的含义[转]
注: ERWin 与 ERStudio 中这一点的描述方法是一样的. ERWin里面线代表实体间的三种关系:决定关系(Identifying Relationship),非决定关系(None-Iden ...
- mysql事务与mysql储存引擎
事务概念及存储引擎 1.0 为何要事务? 先来看一个场景,银行转账汇款: 李彦宏和周鸿祎天天打架,现在让李彦宏给周鸿祎转款1000 元 设计如下表 account表 编号(id)用户名(user)金额 ...
- Python中在脚本中引用其他文件函数的方法
在导入文件的时候,Python只搜索当前脚本所在的目录,加载(entry-point)入口脚本运行目录和sys.path中包含的路径例如包的安装地址.所以如果要在当前脚本引用其他文件,除了将文件放在和 ...
- json字符串转json对象的方法
在使用$.ajax()方法时,我们可以设置dataType:'json'的参数,便可以拿到后台返回的json数据对应的json对象.但有时,我们拿到的是json字符串,需要将它再转成json对象来使用 ...
- db link的查看创建与删除
1.查看dblink select owner,object_name from dba_objects where object_type='DATABASE LINK'; 或者 select * ...
- 将access数据库导入mysql
一般地,直接在mysql端,导入时选择access文件就行:但是若access数据库版本太老,导入mysql时会出错: 这时,就需要借助access 2003,对原始数据进行转换为2003版本数据,即 ...
- JAVA中String与StringBuffer的区别
String和StringBuffer的区别,网上资料可以说是数不胜数,但是看到这篇文章,感觉里面做的小例子很有代表性,所以转一下,并自己做了一点总结. 在java中有3个类来负责字符的操作. 1.C ...
- aix下oracle数据库创建表空间和用户
#mklv -y lvname -T O -w n -s n -r n datavg 500 在两个节点分别修改如下权限: #chown -R oracle:oinstall /dev/rlvname ...
- (转)winform post 访问网站
最近使用winform对webapi进行测试,搜集到园友的文章,记录下来供后续参考. 第一篇文章,原文地址http://www.cnblogs.com/Johnny_Z/archive/2012/02 ...