10.5注意输出的范围是否爆了
题干:众所周知, 铁子哥是一个十分讨厌数学的人。今天铁子哥遇到了一道简单的数学题。题目是给出一个多项式
(ax+b)(cx+d)(ex+f)
要求把这个多项式展开。由于铁子哥十分讨厌数学,所以请聪明机智的你帮铁子哥解决问题。
输入格式:
每个测试样例为包含六个整数 a,b,c,d,e,f(−10000≤a,b,c,d,e,f≤10000)
输出格式:
每组数据输出一行答案,包含4个整数,分别对应 x3 , x2 , x1 , x0 的系数。每个数字以空格分隔,行末没有空格。
最开始我想这也太简单了,不就是数学的公式展开式吗?有手就行,就噌噌噌敲下了代码
#include<iostream> using namespace std; int main(){ int a,b,c,d,e,f; cin>>a>>b>>c>>d>>e>>f; cout<<a*c*e<<" "<<a*c*f+c*e*b+a*e*d<<" "<<a*d*f+c*b*f+e*b*d<<" "<<b*d*f<<endl; return 0; }
兴致勃勃的去提交,结果
只有部分正确,让我百思不得其解,还以为是我展开出错,就有反复算了好几遍,带入了多组常见数据,都可以通过。
只能求救于舍友,才知道是爆了int的范围,题目中10000^3是超出了2^31-1的;后来改成了long long就对了
总结:在这之前我一直以为只考虑输入的范围和定义的范围是否一致,不用管输出是多少,这次我知道了,输出的值也要符合定义的范围