PAT 乙级 1010.一元多项式求导 C++/Java
设计函数求一元多项式的导数。(注:xn(n为整数)的一阶导数为nxn−1。)
输入格式:
以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过 1000 的整数)。数字间以空格分隔。
输出格式:
以与输入相同的格式输出导数多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。注意“零多项式”的指数和系数都是 0,但是表示为 0 0
。
输入样例:
3 4 -5 2 6 1 -2 0
输出样例:
12 3 -10 1 6 0
分析:
1. 用一个flag标志是否已经输出过一个结果了,如果已经输出过一个结果,再输出结果之前要先输出一个空格。这样就能控制结尾没有多余的空格。
2. 对于$a^b$求导,先输出a*b,然后输出b - 1
3. 如果指数和系数都是0,那就 输出0 0
C++实现:
1 #include <iostream> 2 using namespace std; 3 4 int main() 5 { 6 int a, b, flag = 0; 7 while (cin >> a >> b) 8 { 9 if (b != 0) 10 { 11 if (flag == 1) 12 { 13 //flag = 1则表示已经有过输出 14 //在前面要先输出一个空格 15 cout << " "; 16 } 17 cout << a * b << " " << b - 1; 18 flag = 1; 19 } 20 } 21 22 if (flag == 0) 23 { 24 cout << "0 0"; 25 } 26 return 0; 27 }
Java实现:
1 import java.util.Scanner; 2 3 public class Main { 4 public static void main(String[] args) { 5 Scanner input = new Scanner(System.in); 6 String[] str = input.nextLine().trim().split("\\s+"); //.trim()去除字符串头尾的空格 7 String out = ""; 8 for (int i = 0; i < str.length; i += 2) { 9 int a = Integer.parseInt(str[i]); 10 int b = Integer.parseInt(str[i + 1]); 11 int c = a * b; 12 int d = b - 1; 13 if (i == 0 && b == 0) { 14 out = "0 0"; 15 break; 16 } 17 if(c == 0){ 18 continue; //不输出,进入下个循环 19 } 20 out = out + c + " " + d + " "; 21 } 22 System.out.print(out.trim()); 23 } 24 }