hdu_1042(模拟大数乘法)
计算n!
#include<cstring>
#include<cstdio>
using namespace std;
int num[];
int main()
{
int n;
while(~scanf("%d",&n))
{
memset(num,,sizeof(num));
int len = ;
num[] = ;
for(int i = ; i <= n; i++){
for(int j = ; j <= len; j++){
num[j] = num[j]*i;
}
for(int j = ; j <= len; j++){
if(num[j]>) {
num[j+] += num[j]/;
num[j] = num[j]%;
}
if(num[len+]!=) len++;
}
}
for(int i = len; i >= ; i--) printf("%c",num[i]+'');
puts("");
}
return ;
}
用大数的模板也可以,不过每次要吧数字转化成字符串,其实还是自己写比较简单,处理一个简单的进位就可以了
下面是板子:
void mult(char* A,char* B,char* ans)
{
int a[size+]= {};
int b[size+]= {};
int pa=,pb=;
int c[*size+]= {}; int lena=strlen(A);
int lenb=strlen(B); for(int i=lena-; i>=; i--)
a[pa++]=A[i]-'';
for(int j=lenb-; j>=; j--)
b[pb++]=B[j]-''; for(pb=; pb<lenb; pb++)
{
int w=; //低位到高位的进位
for(pa=; pa<=lena; pa++)
{
int temp=a[pa]*b[pb]+w;
w=temp/;
temp=(c[pa+pb]+=temp%);
c[pa+pb]=temp%;
w+=temp/;
}
}
bool flag=false;
bool sign=false; //标记ans是否为全0
for(pa=,pb=lena+lenb-; pb>=; pb--)
{
if(!flag && c[pb]==) //删除ans开头的0
continue;
else
flag=true; sign=true;
ans[pa++]=c[pb]+'';
}
if(sign)
ans[pa]='\0';
else
{
ans[]='';
ans[]='\0';
} return;
}
string sum(string s1,string s2) //大数加法
{
if(s1.length()<s2.length())
{
string temp=s1;
s1=s2;
s2=temp;
}
int i,j;
for(i=s1.length()-,j=s2.length()-;i>=;i--,j--)
{
s1[i]=char(s1[i]+(j>=?s2[j]-'':)); //注意细节
if(s1[i]-''>=)
{
s1[i]=char((s1[i]-'')%+'');
if(i) s1[i-]++;
else s1=''+s1;
}
}
return s1;
} string Mult(string s,int x) //大数乘以整形数
{
reverse(s.begin(),s.end());
int cmp=;
for(int i=;i<s.size();i++)
{
cmp=(s[i]-'')*x+cmp;
s[i]=(cmp%+'');
cmp/=;
}
while(cmp)
{
s+=(cmp%+'');
cmp/=;
}
reverse(s.begin(),s.end());
return s;
}
string Multfa(string x,string y) //大数乘法
{
string ans;
for(int i=y.size()-,j=;i>=;i--,j++)
{
string tmp=Mult(x,y[i]-'');
for(int k=;k<j;k++)
tmp+='';
ans=sum(ans,tmp);
}
return ans;
}
模板转自:http://blog.csdn.net/u012860063/article/details/36903491
hdu_1042(模拟大数乘法)的更多相关文章
- (A - 整数划分 HYSBZ - 1263)(数组模拟大数乘法)
题目链接:https://cn.vjudge.net/problem/HYSBZ-1263 题目大意:中文题目 具体思路:先进了能的拆成3,如果当前剩下的是4,就先不减去3,直接乘4,如果还剩2的话, ...
- PAT 1023 Have Fun with Numbers[大数乘法][一般]
1023 Have Fun with Numbers (20)(20 分) Notice that the number 123456789 is a 9-digit number consistin ...
- [POJ] #1001# Exponentiation : 大数乘法
一. 题目 Exponentiation Time Limit: 500MS Memory Limit: 10000K Total Submissions: 156373 Accepted: ...
- 用分治法实现大数乘法,加法,减法(java实现)
大数乘法即多项式乘法问题,求A(x)与B(x)的乘积C(x),朴素解法的复杂度O(n^2),基本思想是把多项式A(x)与B(x)写成 A(x)=a*x^m+b B(x)=c*x^m+d 其中a,b,c ...
- HDOJ-1042 N!(大数乘法)
http://acm.hdu.edu.cn/showproblem.php?pid=1042 题意清晰..简单明了开门见山的大数乘法.. 10000的阶乘有35000多位 数组有36000够了 # i ...
- 51nod1057-N的阶乘(大数乘法巧解)
这道大数乘法开始我是想套板子模拟的..然后就发现2/3的例子都wa了.(惊了).然后在思考后发现n2的板子的确过不了这么多的大数.(不看题的下场).所以,我在网上发现了分块求大数的方法.%%% 思路来 ...
- hdu1313 Round and Round We Go (大数乘法)
Problem Description A cyclic number is an integer n digits in length which, when multiplied by any i ...
- 51nod 1027大数乘法
题目链接:51nod 1027大数乘法 直接模板了. #include<cstdio> #include<cstring> using namespace std; ; ; ; ...
- 51 Nod 1027 大数乘法【Java大数乱搞】
1027 大数乘法 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 给出2个大整数A,B,计算A*B的结果. Input 第1行:大数A 第2行:大数B (A,B的长度 ...
随机推荐
- iOS 使用 CATransform3D 处理 3D 影像、制做互动立体旋转的效果
1. Swift http://www.cocoachina.com/swift/20170518/19305.html domehttps://pan.baidu.com/s/1i4XXSkH OC ...
- 创建一个可用的简单的SpringMVC项目,图文并茂
转载麻烦注明下来源:http://www.cnblogs.com/silentdoer/articles/7134332.html,谢谢. 最近在自学SpringMVC,百度了很多资料都是比较老的,而 ...
- Spring基础篇——DI和AOP初识
前言 作为从事java开发的码农,Spring的重要性不言而喻,你可能每天都在和Spring框架打交道.Spring恰如其名的,给java应用程序的开发带了春天般的舒爽感觉.Spring,可以说是任何 ...
- async和enterproxy控制并发数量
聊聊并发与并行 并发我们经常提及之,不管是web server,app并发无处不在,操作系统中,指一个时间段中几个程序处于已经启动运行到完毕之间,且这几个程序都是在同一处理机上运行,并且任一个时间点只 ...
- MySQL数据库学习: 01 —— 数据库的概述
壹 概述 一 了解SQL 1.1 数据库基础 1.1.1 什么是数据库 数据库(database)保存有组织的数据的容器(通常是一个文件或一组文件). 易混淆:人们常常用“数据库”这个词语来代表他们使 ...
- APP开发选择什么框架好? 请看这里!
背景 App的开发一般都需要满足Android和iOS两个系统环境,也就意味着一个App需要定制两套实现方案,造成开发成本和维护成本都很高.为了解决这个问题,最好的办法就是实现一套代码跨端运行,所以H ...
- S2 深入.NET和C#编程 三:使用集合组织相关数据
三:使用集合组织相关数据 集合概念: ArrayList:非常类似于数组,也有人称他为数组的列表.ArrayList可以动态维护,数组的容量是固定的 和数组类似,ArrayList中存储的是数据成为元 ...
- Python学习_08_函数式编程
在python中,函数名也是一个变量,代表对一个函数内容的引用,意味着可以作为参数传入到其他函数中,根据这个特性,发散出装饰器.闭包等概念,并涉及到变量作用域等问题. 函数 python中函数操作符为 ...
- Linux入门篇(一)——基本命令
这一系列的Linux入门都是本人在<鸟哥的Linux私房菜>的基础上总结的基本内容,主要是记录下自己的学习过程,也方便大家简要的了解 Linux Distribution是Ubuntu而不 ...
- Spring之设置Bean值
Java实例的属性值可以有很多种数据类型.基本类型值.字符串类型.java实例甚至其他的Bean实例.java集合.数组等.所以Spring允许通过如下几个元素为Bean实例的属性指定值: value ...