⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 zhengshu.java

📁 实现了《算法设计与分析》的一次课后题
💻 JAVA
字号:
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.lang.*;
public class zhengshu {

	/**
	 * @param args
	 */
	
	public static String S="";
	
	
	public static void main(String[] args) throws NumberFormatException, IOException {
		int N = 0,K = 0;
		try{//读入文件中的数据
			FileReader filereader=new FileReader("D:\\shuru.txt");
			BufferedReader reader=new BufferedReader(filereader);
			String s="";
			
			          s=reader.readLine();//掌握这种输入方法
				      String[] str=s.split(" ");
				      N=Integer.valueOf(str[0]);
				      K=Integer.valueOf(str[1]);
				      
				      if(N<K){
				    	  System.err.println("数据错误!");
				    	  System.exit(1);				    		    
			            }
				      
			if((s=reader.readLine())!=null){//存储十进制数
				
					S=s;
				    if(S.length()<N){
					System.err.println("数据与位数不匹配!");
					System.exit(0);
		            }
		}
			reader.close();
		 }catch(FileNotFoundException e){
			 System.err.println("文件没有找到!");
			 System.exit(1);
		 }
		 try{        //存储计算结果到文件
		  FileWriter filewriter=new FileWriter("D:\\shuchu.txt");//实现数据输出到文本文件
          BufferedWriter writer=new BufferedWriter(filewriter);	 
          int result=0;
          result=solve(N,K);
          System.out.println(result);
          String sresult=Integer.toString(result);
          writer.write(sresult);
          writer.close();
		 }catch(FileNotFoundException e)
		 {
			 File f=new File("D:\\shuchu.txt");
			 System.exit(0);
		 }
	} 
	
	public static int conv(int x,int y){//求划分的字段的十进制数值
		// TODO Auto-generated method stub
	String str=S.substring(x,x+y);
	int a=Integer.parseInt(str);
	return a;
	}
    public static int solve(int n,int m){//求n位数的m乘积
    	int i,j,k;
    	int temp,maxt;
       	
    	int f[][]=new int[n+1][m+1];
		for(i=1;i<=n;i++) f[i][1]=conv(0,i);//conv(i,j)表示从i位开始的j位数字组成的十进制数
         for(i=2;i<=n;i++)//计算i位数的j乘积
        	for(j=2;(j<=i)&&(j<=m);j++){
        		for(k=1,temp=0;k<i;k++){
        			maxt=f[k][j-1]*conv(k,i-k);
                    if(temp<maxt)temp=maxt;
                 }
           f[i][j]=temp;
	       
          }
                 
         return f[n][m];
}

	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -