PAT 乙级 1010.一元多项式求导 C++/Java

设计函数求一元多项式的导数。(注:xn​​(n为整数)的一阶导数为nxn1​​。)

输入格式:

以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过 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 }

 

posted @ 2019-10-05 20:57  47的菠萝~  阅读(303)  评论(0编辑  收藏  举报