Digital Root - SGU 118(高精度运算)
题目大意:有K组测试数据,然后每组有N个正整数,A1,A2,A3.....An,求出 A1 + A1*A2 + A1*A2*A3 + .......A1*A2*...An 的数根。
分析:有个对9取余的定理是可以直接求树根的,不过拿来玩大数运算也不错。ps.每位可以保存9位数,保存10位数会溢出。
高精度代码如下:
====================================================================================================================================
#include<algorithm>
#include<stdio.h>
#include<string.h>
#include<queue>
#include<math.h>
using namespace std; const int MAXN = ;
const long long Mod = 1e9; struct BigNum
{
int size;
long long num[MAXN]; BigNum(){
size = ;
memset(num, false, sizeof(num));
}
void CarryBit()
{
for(int i=; i<size; i++)
{
if(num[i] >= Mod)
{
num[i+] += num[i] / Mod;
num[i] %= Mod; if(i == size-)
size += ;
}
}
}
BigNum operator + (const BigNum &b)const
{
BigNum result;
result.size = max(size, b.size); for(int i=; i<result.size; i++)
result.num[i] = num[i] + b.num[i];
result.CarryBit(); return result;
}
BigNum operator *(const long long &x)const
{
BigNum result; result.size = size; for(int i=; i<size; i++)
result.num[i] = num[i] * x;
result.CarryBit(); return result;
}
}; int BitSum(long long x)
{
int ans=; while(x)
{
ans += x % ;
x /= ;
} return ans;
} int main()
{
int T; scanf("%d", &T); while(T--)
{
long long N, x;
BigNum sum, a;
a.num[] = ; scanf("%lld", &N); while(N--)
{
scanf("%lld", &x);
a = a * x;
sum = sum + a;
} int ans = ; for(int i=; i<sum.size; i++)
ans += BitSum(sum.num[i]); while(ans >= )
ans = BitSum(ans); printf("%d\n", ans);
} return ;
}
对9取余代码如下:
=======================================================================================================================
#include<algorithm>
#include<stdio.h>
#include<string.h>
#include<queue>
#include<math.h>
using namespace std; int main()
{
int T; scanf("%d", &T); while(T--)
{
long long N, x, sum=, ans=; scanf("%lld", &N); while(N--)
{
scanf("%lld", &x);
sum = (sum * x) % ;
ans += sum;
} printf("%lld\n", ans% ? ans%:);
} return ;
}
Digital Root - SGU 118(高精度运算)的更多相关文章
- 数学 - SGU 118. Digital Root
Digital Root Problem's Link Mean: 定义f(n)为n各位数字之和,如果n是各位数,则n个数根是f(n),否则为f(n)的数根. 现在给出n个Ai,求出A1*A2*…*A ...
- Digital root(数根)
关于digital root可以参考维基百科,这里给出基本定义和性质. 一.定义 数字根(Digital Root)就是把一个数的各位数字相加,再将所得数的各位数字相加,直到所得数为一位数字为止.而这 ...
- digital root问题
问题阐述会是这样的: Given a non-negative integer num, repeatedly add all its digits until the result has only ...
- [code]高精度运算
数组存储整数,模拟手算进行四则运算 阶乘精确值 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 #includ ...
- 1. 数字根(Digital Root)
数字根(Digital Root)就是把一个自然数的各位数字相加,再将所得数的各位数字相加,直到所得数为一位数字为止.而这个一位数便是原来数字的数字根.例如: 198的数字根为9(1+9+8=18,1 ...
- 快速切题 sgu118. Digital Root 秦九韶公式
118. Digital Root time limit per test: 0.25 sec. memory limit per test: 4096 KB Let f(n) be a sum of ...
- Digital Root 的推导
背景 在LeetCode上遇到这道题:Add Digits 大意是给一个数,把它各位数字相加得到一个数,如果这个数小于10就返回,不然继续 addDigits(这个相加得到的数). 题目很简单,但是如 ...
- 数字根(digital root)
来源:LeetCode 258 Add Dights Question:Given a non-negative integer num , repeatedly add all its digi ...
- 【HDOJ】4351 Digital root
digital root = n==0 ? 0 : n%9==0 ? 9:n%9;可以简单证明一下n = a0*n^0 + a1*n^1 + ... + ak * n^kn%9 = a0+a1+..+ ...
随机推荐
- 如何给html元素的onclick事件传递参数(即如何获取html标签的data-*属性)
现在做的一个小系统为了达到领导所说的很炫的效果有用到Metro UI CSS,但是因为如何给每个磁贴(div标签)的click事件传递参数折腾了蛮久(偶是菜鸟),后来终于找到一个解决方案即通过data ...
- Angularjs中编写指令模版
angular.module('moduleName', []).directive( 'namespaceDirectiveName', [ function() { return { restri ...
- jquery文本折叠
/** * Created by dongdong on 2015/4/28. */(function($){ var defaults = { height:40, //文本收起后的高度 speed ...
- MVVM模式应用 之介绍
M-V-VM (1)M:即Model,由现实世界抽象出来的模型: V:即View,视图,界面,该界面与用户输入设备进行交互: 但是View与Model如何进行交互呢? Binding便可以发挥作用了, ...
- BOM 之 screen history
/* avaiHeight // 屏幕的像素高度减去系统部件高度之后的值 var ah = screen.availHeight; alert(ah); */ /* avai ...
- sublime text 自动保存
perferences->Settings - User添加下面两句话: { "save_on_focus_lost": true, "atomic_save&qu ...
- compser 执行命令提示do not run composer as root/super !
这个是因为composer为了防止非法脚本在root下执行,解决办法随便切换到非root用户即可
- ajax 异步上传视频带进度条并提取缩略图
最近在做一个集富媒体功能于一身的项目.需要上传视频.这里我希望做成异步上传,并且有进度条,响应有状态码,视频连接,缩略图. 服务端响应 { "thumbnail": "/ ...
- 帝国cms 列表页分页样式修改美化【2】
上一篇(帝国cms 列表页分页样式修改美化[1])中我们已经对分页说了一个大概,下面我们就自己动手弄一个分页把: 第一步:进入帝国cms后台,点击系统设置->系统参数设置->信息设置:里面 ...
- 【C语言】printf函数详解
C语言printf函数详解 一.相关基础知识 请求printf()打印变量的指令取决于变量的类型,例如打印整数用%d符号,打印字符用%c符号,这些符号称为转换说明(conversion specifi ...