一、题目描述

Given a polynomial and the value of the variable x, you task is to calculate the value of the polynomial.

二、输入

The first line of the input is a positive integer T. T is the number of test cases followed.

In each test case, the first line contains two integer n and x (0<=n<=50, 0<=x<=10000). The second line contains n+1 integers, representing the coefficients of a polynomial from power degree N down to power degree 0, each integer is no less than 0 and no more than 10000.

三、输出

The output of each test case should consist one line, containing the result of the polynomial.

例如:

输入:

1

2 5

1 2 3

输出:

38

四、解题思路

题意:这道题要求的是多项式值。如果只是简单的求多项式的值很简单。可题目有个条件是 (0<=n<=50, 0<=x<=10000),这样求出来的数已经超过了long long类型。

开始不知道怎么处理这个大数问题,在这里卡住了。后来同学说使用数组处理。以前没接触过使用输出保存大数的问题,当时也上不了网,于是自己思考一下,使用一个数组n表示n位十进制。每位表示十进制中的一位数。大数+(int类型)常数;大数*(int类型)常数。

1、多项式计算方法

记得高中学过求多项式值得方法能较少计算量:

如多项式:1*5^2+2*5^1+3*5^0

2、数组表示整数

例如439保存在数组bigInteger[3];bigInteger[2]=4;bigInteger[1]=3;bigInteger[0]=9;

1)数组表示的整数加上一个常数num

例如加上35。

先从最低位开始,例如bigInteger[0]+35=43;bigInteger[0]=43%10;进位数carryInt=43/10=4;

向高位逐步计算

bigInteger[1]+4=7,bigInteger[1]=7%10,carryInt=7/10。

当出现carryInt为0是停止计算,否则不断想高位计算。

计算的结果是:

bigInteger[2]=4;bigInteger[1]=7;bigInteger[0]=4;

2)数组表示的整数乘以一个常数num

例如bigInteger[2]=4;bigInteger[1]=7;bigInteger[0]=4;乘以4。

也是从最低位开始bigInteger[0]*4=16,bigInteger[0]=16%10=6;

进位数carryInt=16/10=1;

继续到下一位(高位):bigInteger[1]*4=28,28+carryInt=29,bigInteger[1]=29%10=9,

carryInt=29/10=2;

继续下一位:bigInteger[2]*4=16,16+carryInt=18,bigInteger[2]=18%10=8,

carryInt=18/10=1;

继续下一位:

bigInteger[3]开始至为0,所以bigInteger[3]=bigInteger[3]+carryInt=1。

最后计算结果为:bigInteger[3]=1,bigInteger[2]=8,bigInteger[1]=9,bigInteger[0]=6

五、代码

#include<iostream>

using namespace std;

const int BIT_NUM = 200;    //支持大数的最大位数(200位)

int main()
{
int times;
cin >> times; while(times--)
{
int bigInteger[BIT_NUM] = {0}; //用数组保存一个大数
int n, x, argue; //n-多项式的最高次数,x-位置数x的值,argue-每一项的系数
long long sum = 0; //多项式的结果
cin >> n >> x;
for(int k = 0; k < (n + 1); k++) //计算多项式,这里使用了一个公式例如1*5^2+2*5^1+3*5^0=38 可以写成(1*5+2)*5+3=38
{
cin >> argue;
int carryInt = 0; //进位(从低位算起,例如各位数是7乘以一个常数8,那么结果各位数是6,向高位数进5(carryInt))
for(int i = BIT_NUM; i > 0; i--) //一个大数乘以一个常数,从各位开始逐个与常数相乘,满十向高位进
{
bigInteger[i-1] = bigInteger[i-1] * x + carryInt;
carryInt = bigInteger[i-1] / 10;
bigInteger[i-1] %= 10;
} //大数加上一个常数
int addCarry = 0;
bigInteger[BIT_NUM - 1] += argue; //大数加上一个常数argue,先个位数加
for(int i = BIT_NUM; i > 0; i--)
{
bigInteger[i-1] = bigInteger[i-1] + addCarry;
addCarry = bigInteger[i-1] / 10; //addCarry保存进制数
bigInteger[i-1] %= 10;
if(addCarry == 0) break; //如果出现不需要向高位数进的退出
}
} int flag = false;
for(int i = 0; i < BIT_NUM; i++) //从高位第一个非0开始输出大数
{
if(bigInteger[i] != 0) {flag = true;}
if(flag) {cout << bigInteger[i];}
}
cout << endl; }
return 0;
}

<Sicily>Polynomial的更多相关文章

  1. Polynomial Library in OpenCascade

    Polynomial Library in OpenCascade eryar@163.com 摘要Abstract:分析幂基曲线即多项式曲线在OpenCascade中的计算方法,以及利用OpenSc ...

  2. sicily 中缀表达式转后缀表达式

    题目描述 将中缀表达式(infix expression)转换为后缀表达式(postfix expression).假设中缀表达式中的操作数均以单个英文字母表示,且其中只包含左括号'(',右括号‘)’ ...

  3. sicily 1934. 移动小球

    Description 你有一些小球,从左到右依次编号为1,2,3,...,n. 你可以执行两种指令(1或者2).其中, 1 X Y表示把小球X移动到小球Y的左边, 2 X Y表示把小球X移动到小球Y ...

  4. 周赛-Integration of Polynomial 分类: 比赛 2015-08-02 08:40 10人阅读 评论(0) 收藏

    Integration of Polynomial Time Limit: 2000/1000MS (Java/Others) Memory Limit: 128000/64000KB (Java/O ...

  5. FZU 2215 Simple Polynomial Problem(简单多项式问题)

    Description 题目描述 You are given an polynomial of x consisting of only addition marks, multiplication ...

  6. Project Euler 101 :Optimum polynomial 最优多项式

    Optimum polynomial If we are presented with the first k terms of a sequence it is impossible to say ...

  7. 大数求模 sicily 1020

        Search

  8. 【数论】UVa 10586 - Polynomial Remains

    Problem F: Polynomial Remains Given the polynomial a(x) = an xn + ... + a1 x + a0, compute the remai ...

  9. Sicily 1510欢迎提出优化方案

    这道题我觉得是除1000(A-B)外最简单的题了……不过还是提出一个小问题:在本机用gcc编译的时候我没包括string.h头文件,通过编译,为什么在sicily上却编译失败? 1510. Mispe ...

随机推荐

  1. Java多线程之~~~线程安全容器的非堵塞容器

    在并发编程中,会常常遇到使用容器.可是假设一个容器不是线程安全的.那么他在多线程的插入或者删除的过程 中就会出现各种问题.就是不同步的问题.所以JDK提供了线程安全的容器,他能保证容器在多线程的情况下 ...

  2. VMware虚拟机ubuntu显示屏幕太小解决办法

    使用VMware安装的ubuntu虚拟机的显示屏幕太小,可以通过在VMware里安装"VMware Tool"插件解决,安装步骤记录一下. 1. 更改ISO文件路径 安装VMwar ...

  3. .net core @Html 自定义属性中包含特殊符号解决

    最近自己在练手项目用到了VUE 绑定属性的时候发现 有: -符号 这样显然是不支持的.之前发现 v-on  这种-符号也是不支持的 但是可用 @v_on 替代.可是找遍了所有资料也没找到:转义符 当时 ...

  4. sicily 1137 河床 (二分分治)

    <计算机算法设计与分析>啃书中... 有点看不进书,就来刷个水题吧,刚开始看错题了还. 注意:是所有测量点相差均不大于di而不是相邻两点... //1137.河床 #include < ...

  5. HD-ACM算法专攻系列(12)——Integer Inquiry

    问题描述: 源码: import java.math.BigInteger; import java.util.*; public class Main { //主函数 public static v ...

  6. 【原创】ApacheTomcat集群在Linux下的搭建步骤

    在RedHat5(以下简称RH)上搭建ApacheTomcat的集群环境,有以下步骤: 1.首先安装apr和apr-util apr-util需要依赖于apr包,所以先安装apr, http://fi ...

  7. 【原创】关于not in的一些事情

    早上到公司,收到一条cocall消息,是某哥们遇到的疑惑,可能很多新手并不知情: 请教个问题 我执行 . select * from t_htgl_htpswj t where t.c_wjmc = ...

  8. 监控慢SQL

    SELECT G.TARGET || ' ' || S.MACHINE || ' ' || ceil((G.LAST_UPDATE_TIME - G.START_TIME)*86400)   FROM ...

  9. 优动漫PAINT中误删工具怎么办?

    最近收到一些小伙伴的提问,说我不小心把 XXX工具从面板上删掉了怎么办?本教程就来给大家分 享一下遇到这个问题时的三种解决方法,遇到同样问题的小伙伴们赶紧进来看一下哟! 优动漫PAINT下载:http ...

  10. 优动漫PAINT基础系列之存储格式说明

    本篇经验带大家了解优动漫PAINT可以存储成哪些格式! 最近有收到试用优动漫PAINT个人版试用版的小伙伴提问,优动漫PAINT可以导出什么格式文件呢?今天就这一问题做一下解答〜 优动漫PAINT[试 ...