PKU 1001解题代码
本来以前也写过,但是由于许多细节问题,没有AC,今天修改了一下,终于AC了,以前没有AC的具体原因总结了了一下,必须任何数的0次方都等于1没有考虑,还有就是首0和末尾0以及小数点没有处理好,下面贴代码,应该还可以优化一下, 比如乘数和被乘数如果是0,可以忽略,求指数也可以采用分治法,以后再有时间了补充吧
// bigMulMul.cpp : 定义控制台应用程序的入口点。
// #include "stdafx.h"
#include <string>
#include <iostream>
using namespace std;
string bigAdd(string a,string b)
{
int lena=a.length();
int lenb=b.length();
int dislen=lena-lenb;
char cc[];
string temp;
int carry=;
if (lena>lenb)
{
for (int j= ;j<a.length();j++)
{
int c=;
if (j<lenb)
c=(a[j]-''+b[j]-'')+carry;
else
c=a[j]-''+carry;
char tt[];
sprintf(tt,"%d",c%);
temp+=tt;
carry=c/;
} }
if (lena<lenb)
{
for (int j= ;j<b.length();j++)
{
int c=;
if(j<lena)
c=(b[j]-''+a[j]-'')+carry;
else
c=b[j]-''+carry;
char tt[];
sprintf(tt,"%d",c%);
temp+=tt;
carry=c/;
}
}
if (lena==lenb)
{
for (int j= ;j<a.length();j++)
{
int c=;
c=(a[j]-''+b[j]-'')+carry;
sprintf(cc,"%d",c%);
temp+=cc;
carry=c/;
}
} if (carry>)
{
sprintf(cc,"%d",carry);
temp+=cc;
}
return temp; }
string bigMul(string a,string b)
{
int lena=a.length();
int lenb=b.length();
int apoint=lena-a.find('.')-;
int bpoint=lenb-b.find('.')-;
if (apoint==lena)apoint=;
if (bpoint==lenb)bpoint=;
char cc[];
string temp; //store one mul result
string total=""; //store all add result
int ZeroNum=;//store add zero num
for (int i=a.length()-;i>=;i--)
{
int carry=;
if (a[i]=='.')
continue;
for (int j=b.length()-;j>=;j--)
{
if (b[j]=='.')
continue;
int t=(a[i]-'')*(b[j]-'')+carry; //add carry
sprintf(cc,"%d",t%);
temp+=cc;
carry=t/; }
if (carry>)
{
sprintf(cc,"%d",carry);
temp+=cc;
}
if (total.length()==)
{
total=temp;
}else
{
temp.insert(,ZeroNum,''); //convenent for compute
total=bigAdd(total,temp);
ZeroNum++;
}
temp="";
}
if (apoint!=&&bpoint!=)
{
if (apoint+bpoint>total.length())
{
for (int i=;i<apoint+bpoint-total.length();i++)
{
total+= "";
} } total.insert(apoint+bpoint,".");
}
string locals=""; for (int i=total.length()-;i>=;i--)
{
locals+=total[i];
}
return locals;
}
string preProcess(string a ,int b)
{
string res;
char temp[]={};
int pos=a.find('.');
int i;
for (i=;i<a.length();i++)
{
if(a[i]!=''&&i!=pos)break;
}
if (i==a.length())
{
return "";
} res=a;
for (int i=;i<b-;i++)
{
res=bigMul(res,a);
}
int len=res.length();
while (res.length()>)//去除前面的0
{
if (res[]!='')
{
break;
}
res.erase(,);
}
if(res.find('.')!=-) //必须有小数点才可以去除尾部的0
{
for (int i=res.length()-;i>=;i--)//去除尾部的0
{
if (res[i]!='')
{
if(res[i]=='.')
res.erase(i,);
break;
}
res.erase(i,);
}
} return res;
}
int main(int argc, char* argv[])
{
char R[];
int b; while(cin>>R>>b)
{
if (b==) //如果b=0 ,任何数的0次方 =1
{
cout<<""<<endl;
return ;
}
string temp=preProcess(R,b); if (temp.length()==)
{
if (temp[]=='.')
{
cout<<""<<endl;
}
cout<<temp[]<<endl;
}else
{
for (int i=;i<temp.length();i++)
{
cout<<temp[i];
}
cout<<endl;
}
} return ;
}
PKU 1001解题代码的更多相关文章
- 数独_erlang解题代码
前几天LP玩数独,玩到大师级各种被虐,我看了看说,分分钟帮你做出来, 结果当然没有做出来. 于是上网搜了下数独的解题代码,看了下C的代码,大多是递归之类的(如http://blog.sina.com. ...
- POJ 1001 解题报告 高精度大整数乘法模版
题目是POJ1001 Exponentiation 虽然是小数的幂 最终还是转化为大整数的乘法 这道题要考虑的边界情况比较多 做这道题的时候,我分析了 网上的两个解题报告,发现都有错误,说明OJ对于 ...
- PAT (Advanced Level) Practise 1001 解题报告
GiHub markdown PDF 问题描述 解题思路 代码 提交记录 问题描述 A+B Format (20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判 ...
- PKU 1003解题
首先庆祝一下,今天连A了3题.感觉后面这题太简单了.. 由于英文不好 ,找了个翻译: 若将一叠卡片放在一张桌子的边缘,你能放多远?如果你有一张卡片,你最远能达到卡片长度的一半.(我们假定卡片都正放在桌 ...
- PKU 1002解题总结
闲来无事,研究了一下PKU1002的题目,大意就是把含有字母的电话号码,转换为数字,然后再计算每个电话号码出现的次数,输出.本来蛮简单的一道题,结果折腾了好久,主要也是自己的水平太菜了,先是直接用字符 ...
- 极限编程,最强N皇后JAVA解题代码,4秒出15皇后,33秒出16皇后
私人博客原文链接来自:http://www.hexcode.cn/article/show/eight-queen 8皇后以及N皇后算法探究,回溯算法的JAVA实现,非递归,循环控制及其优化 8皇后以 ...
- ACM/ICPC ZOJ1009-Enigma 解题代码
#include <iostream> #include <string> using namespace std; int main() { int strwide; cin ...
- ACM/ICPC ZOJ1006-Do the Untwist 解题代码
#include <iostream> #include <string> #include <stdlib.h> using namespace std; int ...
- ACM/ICPC ZOJ1003-Crashing Balloon 解题代码
#include <iostream> using namespace std; int main() { int **array = new int *[100]; for ( int ...
随机推荐
- bash命令行返回值和展开
bash命令行返回值和展开 标签(空格分隔): bash,命令,状态,展开 1.命令状态结果和执行结果 (1)命令执行的状态返回值,命令执行完成之后,其执行状态结果值保存于bash的特殊状态变量$?中 ...
- django中css问题
django中加载的css,js,图片其中js和图片可以加载出来,而css没有效果.原因如下: 这是因为你安装的某些IDE 或者其他更改了注册表导致的系统的注册表\HKEY_CLASSES_ROOT\ ...
- 3d旋转
<!DOCTYPE html><html lang="zh-cmn-Hans"><head><meta charset="utf ...
- PIL中的Image和numpy中的数组array相互转换
1. PIL image转换成array img = np.asarray(image) 需要注意的是,如果出现read-only错误,并不是转换的错误,一般是你读取的图片的时候,默认选择的是&quo ...
- 51nod1265 四点共面
题目链接:51nod 1265 四点共面 四个点构成的三个向量a,b,c共面的充要条件是存在不全为零的实数x,y,z满足x*a+y*b+z*c=0,然后想到线代了.. 其实就是三个向量的混合积为0:( ...
- IT求职中,笔试、面试的算法准备
PS:此文章为转载,源地址:http://www.newsmth.net/nForum/#!article/CoderInterview/849 作者应该是在美国进行的笔试面试,感觉面试的的公 ...
- JAVA 多线程随笔 (三) 多线程用到的并发容器 (ConcurrentHashMap,CopyOnWriteArrayList, CopyOnWriteArraySet)
1.引言 在多线程的环境中,如果想要使用容器类,就需要注意所使用的容器类是否是线程安全的.在最早开始,人们一般都在使用同步容器(Vector,HashTable),其基本的原理,就是针对容器的每一个操 ...
- sq楼盘信息
Sq楼盘信息 1.1按关注度来分 前10个 序号 楼盘 网址 价格 关注人数 地址 附件社区 1 上海公馆 http://shangqiu.jiwu.com/loupan/236459.html 38 ...
- (SenchaTouch+PhoneGap)开发笔记(2)开发环境搭建二
一.Java环境和Android SDK 1.安装JDK和JRE JRE会在JDK安装完成后自动出现安装界面. 安装完成后,设置环境变量 JAVA_HOME D:\Program Files\ ...
- Ext4 ComboBox组件使用
先来看例子: Ext.define('schoolModel', { extend: 'Ext.data.Model', fields: [{ name: 'id', type: 'string' ...