C语言&Java实现“输入系数和幂,输出加法多项式”

6 篇文章 0 订阅

C语言&Java实现“输入系数和幂,输出加法多项式”

每行输入两个数,第一个数为系数,第二个数是幂次,最后结果由高幂次到低幂次输出加法多项式。
【下面的代码没有考虑系数为负】
C语言:

//多项式加法
//输入样例:第一位是系数,第二位是幂次 
// 2	6
// 3 	5
// 12	3
// 6 	1
// 20	0
// 2 	6
// 3 	5
// 12	2
// 6 	1
// 20	0
//输出样例:
//4x6+6x5+12x3+12x2+12x+40
#include "stdio.h"
int function(int array[20][2],int length)
{
	int b[20][2];//定义二维数组b用于存储同幂合并后的结果 
	int count1=0;//设置计数项 
	for(int key=0;key<=100;key++){//设置一个key去比对幂次,幂次最大为100 【可以设置for(int key=100;key>=0;key--),后面输出多项式时就可以简化】
		int temp=0;
		for(int i=0;i<length;i++){
				if(array[i][1]==key){//幂相同的项相加 
					temp+=array[i][0]; 
				}
				if(i==length-1 && temp!=0){//设置数据录入条件:当遍历完整个数组(标志:i=length-1),且temp不能为0时 
					b[count1][0]=temp;
					b[count1][1]=key;
					count1++;
				}
		}
	}
	for(int j=count1-1;j>=0;j--){//输出多项式 
//		if(j!=0){
//			if(b[j][1]==0){
//				printf("%d",b[j][0]);
//			}else if(b[j][1]==1){
//				printf("%dx+",b[j][0]);
//			}else{
//				printf("%dx%d+",b[j][0],b[j][1]);
//			}
//		}else{
//			if(b[j][1]==0){
//				printf("%d",b[j][0]);
//			}else if(b[j][1]==1){
//				printf("%dx",b[j][0]);
//			}else{
//				printf("%dx%d",b[j][0],b[j][1]);
//			}
//		}
		printf("%d",b[j][0]);
		if(b[j][1]!=0){
			printf("x");
			if(b[j][1]==1){
				printf("+");
			}else if(j==0){
				printf("%d",b[j][1]);
			}else{
				printf("%d+",b[j][1]);
			}
		}
	}
} 

int main()//主函数
{
	int a[20][2]; 
	printf("请输入(键入-1结束输入):\n");
	int length=sizeof(a)/sizeof(a[0]);//获取数组a的长度 
	int count=0;//设置一个计数项,录一次数据累加一次 
	for(int i=0;i<length;i++){
		for(int j=0;j<2;j++){
				scanf("%d",&a[i][j]);
			if(a[i][j]==-1) //如果输入结果为-1,则跳出for循环 
				goto out;
		}
		count++;
	}
	out:
	function(a,count);
} 

Java:

package Grant;
import java.util.Scanner;
public class 多项式1 {
	public static void main(String[] args) {
		Scanner sc=new Scanner(System.in);
		int[][] a=new int[20][2];
		System.out.println("请输入(键入-1结束输入):");
		int count=0;
		OUT://跳出最外层的循环,接下来直接往21行去
		for(int i=0;i<a.length;i++) {
			for (int j = 0; j < 2; j++) {
				a[i][j]=sc.nextInt();
				if(a[i][0]==-1) {
					break OUT;
				}
			}
			count++;
		}
		solution s=new solution();
		s.function(a, count);
	}
}

class solution{
	void function(int[][] array,int length) {
		int[][] b=new int[20][2];
		int count1=0;
		for(int key=0;key<100;key++) {
			int temp=0;
			for(int i=0;i<length;i++) {
				if(array[i][1]==key) {
					temp+=array[i][0];
				}
				if(i==length-1 && temp!=0) {
					b[count1][0]=temp;
					b[count1][1]=key;
					count1++;
				}
			}
		}
		for(int j=count1-1;j>=0;j--) {
			System.out.print(b[j][0]);
			if(b[j][1]!=0) {
				System.out.print("x");
				if(b[j][1]==1) {
					System.out.print("+");
				}else if(j==0) {
					System.out.print(b[j][1]);
				}else {
					System.out.print(b[j][1]+"+");
				}
			}
		}
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值