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的更多相关文章
随机推荐
- redis使用日志(二) 数据存储到redis
一段简短的代码,来展示如何把爬取内容写到redis里面: #! /usr/bin/env python # -*- coding=utf-8 -*- import requests import js ...
- poj 1251 统计难题(字典树)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1251 AC代码: #include<iostream> #include<algor ...
- char 汉字
Unicode/UCS总结: UCS和Unicode使用最大32bit来表示字符(它的范围很大,但不一定全使用,常使的是UCS-2),它用2~4个字节的空间描述了已知的接近全部的字符(并且仍在更新,还 ...
- AngularJs编写指令
<!DOCTYPE html> <html ng-app="app"> <head lang="en"> <meta ...
- Python之几个技巧特点
今天偶然看到一篇文章<你可能不知道的30个Python语言的提点技巧>,虽然做python有几年了,但中间还是好多不知道或没想到,特在这里做下摘抄. 原文地址: http://soft.c ...
- [JS]以下是JS省市联动菜单代码
以下是JS省市联动菜单代码: 代码一: <html> <head> <title></title> <script language=" ...
- 无法加载程序集,因为该程序集包含EdmSchemaAttribute,并按名称加载结束类型。不允许同时按名称和特性进行加载
小小记录下,今天写程序时遇到的一个bug,相信大家用MVC+EF写项目时遇到的概率是挺大的.昨天本人也遇到了,很悲剧,暂时没想到好的办法解决,跟项目经理交流了下,这个问题认为出现在EF的自身设计上,它 ...
- Redis多机功能之Sentinel
Sentinel的目的:监视主从服务器,并在主服务器下线时自动进行故障转移 启动Sentinel 通过执行Redis安装文件中的redis-sentinel程序,可以启动一个Sentinel实例: r ...
- linux多线程
#include <pthread.h> pthread_t pid; pthread_create(&pid, 0, pFunc, pArgs); //创建线程(linux下线程 ...
- WebsitePanel 2.1.0beta配置部分
到http://www.websitepanel.net/downloads/下载好单独安装包作为网站内容运行在IIS7.0上,配置applicationpool为localsystem Websit ...