POJ 1001 大数

2024-06-20 04:38
文章标签 poj 大数 1001

本文主要是介绍POJ 1001 大数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

无聊水一道。。大数模拟

各种坑爹测试数据

#include "stdio.h"
#include "string.h"
int a[10010],b[10010],c[10010];
int main()
{int w,i,j,m,dian,k,le;char str[1001];while (scanf("%s%d",&str,&w)!=EOF){getchar();if (w==0){printf("1\n");continue;}memset(a,0,sizeof(a));memset(b,0,sizeof(b));memset(c,0,sizeof(c));le=strlen(str);m=1;dian=-1;for (i=le-1;i>=0;i--){if (str[i]=='.') dian=m-1;else{a[m]=str[i]-'0';m++;}}a[0]=m-1;while (a[a[0]]==0) {a[0]--; if (a[0]==0) break;}if (a[0]==0){printf("0\n");continue;}for (i=0;i<=a[0];i++)b[i]=a[i];for (i=2;i<=w;i++){memset(c,0,sizeof(c));for (j=1;j<=a[0];j++)for (k=1;k<=b[0];k++)c[j+k-1]+=a[j]*b[k];c[0]=a[0]+b[0]-1;for (j=1;j<=c[0];j++){c[j+1]+=c[j]/10;c[j]%=10;}if (c[c[0]+1]!=0) c[0]++;while (c[c[0]]==0){c[0]--;}for (j=0;j<=c[0];j++)a[j]=c[j];}if (dian==-1){for (i=a[0];i>=1;i--)printf("%d",a[i]);printf("\n");}else{dian*=w;if (a[0]<=dian){printf(".");for (i=1;i<=dian-a[0];i++)printf("0");k=1;while(a[k]==0) k++;for (i=a[0];i>=k;i--)printf("%d",a[i]);printf("\n");}else{for (i=a[0];i>dian;i--)printf("%d",a[i]);k=1;while(a[k]==0) k++;if (dian>=k) printf(".");for (i=dian;i>=k;i--)printf("%d",a[i]);printf("\n");}}}return 0;
}


这篇关于POJ 1001 大数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1077126

相关文章

poj 3882(Stammering Aliens) 后缀数组 或者 hash

后缀数组:  构建后缀数组,注意要在字符串莫末尾加上一个没出现过的字符。然后可以2分或者直接扫描,直接扫描需要用单调队列来维护 VIEW CODE #include<cstdio>#include<algorithm>#include<iostream>#include<cmath>#include<queue>#include<stack>#include<string

poj 3294(Life Forms) 2分+ 后缀数组

我曾用字符串hash写,但是超时了。只能用后最数组了。大致思路:用不同的符号吧字符串连接起来,构建后缀数组,然后2分答案,依次扫描后缀数组,看是否瞒住条件。 VIEW CODE #include<cstdio>#include<vector>#include<cmath>#include<algorithm>#include<cstring>#include<cassert>#

poj 2391 Ombrophobic Bovines (网络流)

这是一道很经典的网络流的题目。首先我们考虑假如我们的时间为无穷大。我们吧每个点拆成2个点 i和i' .。虚拟源点s和汇点t。对于每个点建边(s,i, a[i])  (i‘,t,ib[i]) 。 其中a[i]为给点有多少牛,b[i]为容量。i和j连通 建边 (i,j',inf);如果最大流==所有牛的个数,就可能装下所有的牛。那么现在我们考虑时间。假设最大时间为T.那么如果i到j的的最短时间>T

poj 1330 LCA 最近公共祖先

水题目。直接上代码了。 VIEW CODE #include<cstdio>#include<algorithm>#include<iostream>#include<cmath>#include<queue>#include<stack>#include<string>#include<cstring>#include<map>#include<vector>#

poj 3160 Father Christmas flymouse 强连通+dp

首先我们可以确定的是,对于val值小于0的节点都变成0.   假设一个集合内2个房间都能任意到达,那么我就可以吧集合内的所有点的价值都取到,并且可以达到任一点。实际上集合内的每个点是相同的,这样的集合就是一个强连通分量。 那么我们就可以用tarjin算法进行强连通缩点, 最后形成一个dag的图。在dag的图上面进行dp。可以先用拓扑排序后dp。或者建反响边记忆化搜索 。 VIEW

poj 1564 Sum It Up -- DFS 递归

题意:给一个数 t ,以及 n 个数,求 n 个数中的几个数加起来的和为 t 的情况有多少种。 注意:题目要求相同的组合方式不能出现2次,即 “3 4 1 1 1 1 ” 的结果为:“1+1+1”。 思路:一个  for  循环遍历一遍,每个 i 表示以当前数为起点开始一次DFS递归,当所遍历的和为 t 时,输出该组合方式,如果大于 t 则返回,小于则往下递归。以二维数组保存已经输出过的数据,

道路 Road(百练,POJ)

题目链接: 1724 -- ROADS (poj.org) 题目描述: 思路: 这题目乍一看,是一个含有2个标尺的单源最短路问题,挺难处理的。 既然没法直接用最短路处理,那我们就“记录信息”,将花费的时间也记录进dp数组,然后跑“状态最短路”。 用f[i][j] 表示到达点i 且 总花费时间为j的最短距离,然后跑堆优化的dijkstra算法就好。由于不含有负边权,因此可以搞一个vis数

[leetcode] 43. Multiply Strings(大数相乘)

Multiply Strings 描述 Given two non-negative integers num1 and num2 represented as strings, return the product of num1 and num2. Note: 1. The length of both num1 and num2 is < 110. 2. Both num1 an

再来一种求大数阶乘的方法

过多的我就不说了,直接看看代码: java版的: /*** */package Factorial;/*** @author 牟尼(昵称)* @blog:http://blog.csdn.net/u012027907**/public class Factorial {/** 大数阶乘计算类*//** 分析:大数阶乘用数组来存储,如5的阶乘可存在数组cal[]中,表示为* 0

[POJ 1284] Primitive Roots (数论,原根)

POJ - 1284 题意是,求一个质数的原根 原根的定义是,对于正整数 aimodp(i=[1,p−1]) a^i mod p (i=[1,p-1])得到的集合为{1,2,…,p-1},那么则称 a是 p的一个原根 对于任意正整数 p,其原根个数为 ϕ(ϕ(p)) \phi( \phi(p) ), ϕ(n) \phi(n)为欧拉函数,表示小于n且与n互质的数的个数 而质数的欧拉函数值