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+..+ ...
随机推荐
- Java MD5校验
Java 生成MD5 MD5(Message Digest Algorithm),消息摘要算法,一般用于校验文件的完整性.Java内置已经实现了MD5,与SHA1算法,利用java.security. ...
- 4.SQL语言基础
4.1语言分类和用户模式 4.1.1语言分类 1)数据查询语言 用语检索数据库中的数据,主要是select语句,是操作数据库时最为频繁使用. 2)数据操纵语言 用语改变数据库中的数据,主要包括inse ...
- 转载C#泛型集合—Dictionary<K,V>使用技巧
1.要使用Dictionary集合,需要导入C#泛型命名空间 System.Collections.Generic(程序集:mscorlib) 2.描述 1).从一组键(Key)到一组值(Value) ...
- 微信菜单开发:使用PHP数组来定义微信菜单
目前使用数组的方式来定义,然后在通过json_encode函数来转JSON $menuJson=array(); $menuJson['button'][]=array('name'=>urle ...
- input 标签的class 失效
今天CSS网页的是时候,动态添加input class属性失效, 检查原因是因为之前对此input 使用了 input[type='checkbox'] 应该给其定义一个CLASS,其后面动态添加C ...
- 为什么selenium定位不到元素
在做web应用的自动化测试时,定位元素是必不可少的,这个过程经常会碰到定位不到元素的情况,一般可以从以下几个方面着手解决: 1.Frame/Iframe原因定位不到元素: 这个是最常见的原因,首先要理 ...
- DataTable一些操作
DataTable ReturnDt = new DataTable("Tab_Result"); ReturnDt.Columns.AddRange(new DataColumn ...
- source insight 使用技巧
一.在所有文件中查找字符串 1.菜单栏选择“search project” 2.在随便一个工程文件中把所要查找的字符串输入到空白的地方,然后点连接
- C# Http POST get
using System.IO;using System.Net; /// <summary> /// HttpWebRequest发送Post请求 /// < ...
- net Core 通过 Ef Core 访问、管理Mysql
net Core 通过 Ef Core 访问.管理Mysql 本文地址:http://www.cnblogs.com/likeli/p/5910524.html 环境 dotnet Core版本:1. ...