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 ...
随机推荐
- 即时反应的input和propertychange方法
在web开发中,我们有时会需要动态监听输入框值的变化,当使用onkeydown.onkeypress.onkeyup作为监听事件时,会发现一些复制粘贴等操作用不了,同时,在处理组合快键键的时候也很麻烦 ...
- 数字图像处理作业使用OpenCV - 块提取
今天要记录的是树图第二次作业的第二题,Image Patch Extraction.这个概念真的不难懂,但是如果要我实际写的话,还真的不知道要怎么去遍历图像矩阵来提取块.在此要多谢邓大神的热心帮助,告 ...
- PHP返回XML数据
开发中经常会有用到XML格式数据的时候,那么用PHP怎么来将数组格式的数据用XML格式返回呢? 新建一个类文件,叫ArrayToXml.php <?php /** * 数组转XML类 * 使用方 ...
- Convert Sorted List to Binary Search Tree [LeetCode]
Given a singly linked list where elements are sorted in ascending order, convert it to a height bala ...
- Ubuntu搭建svn服务器
一,安装必须的软件包. sudo apt-getinstall subversion 二,基本的SVN服务器配置 1,新建一个目录用于存储SVN所有文件 # ...
- 课堂作业二 PAT1025 反转链表
MyGitHub 终于~奔溃了无数次后,看到这个结果 ,感动得不要不要的::>_<:: 题目在这里 题目简述:该题可大致分为 输入链表 -> 链表节点反转 -> 两个步骤 输入 ...
- CentOS_7.2服务器前期
一.禁用SELinux:# 永久禁用,需要重启生效: sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux se ...
- org.apache.catalina.webresources.Cache.getResource Unable to add the resource
org.apache.catalina.webresources.Cache.getResource Unable to add the resource at xxx to the cache be ...
- python安装supervisor
1.下载supervisor-3.3.1.tar.gz http://pan.baidu.com/s/1dEPhGEd 2.下载meld3-1.0.2.tar.gz http://pan.b ...
- [并查集] POJ 2236 Wireless Network
Wireless Network Time Limit: 10000MS Memory Limit: 65536K Total Submissions: 25022 Accepted: 103 ...