//largestPalindrome
// 求最大数回文
import std.format.*
import std.math.*
import std.collection.*
import std.console.*
import std.convert.*
import std.random.*
import std.sync.*
import std.time.*

 main(){
   //var  nums:Array<Int64> = [3,2,4]
   var s=Solution()
   for(数字 in 7..=7){
    for(位数 in 1..=10){
    println("回文 ${数字} ${位数}=  ${s.制作回文(位数,数字)}")
    }
   }
 //   println("回文 =  ${s.制作回文(13,5)}")
   
    return 0
}
class Solution {
    func largestPalindrome(n: Int64, k: Int64): String {


        return 制作回文(n,k)
    }
    func 判断回文(大数: Int64):Bool{


        return false
    }
    func 比较回文(大数: Int64,特殊数字: Int64): Int64{
        if(大数 % 特殊数字 == 0){
            return  大数
        }
        

        return 0
    }
    
    func 制作回文(大数: Int64 ,特殊数字:Int64):String{
        // if(大数>=1){
        //     let c = Array<String>(大数) { i => "9" }
        //   // init(Array<Rune>)
        //    // var a="999999".toRuneArray()
        //     // let c = Array<Int64>(3, repeat: 0)
        //     var tempA =Array<String>(大数,repeat:"9")
        //     var cc=String.join(tempA, delimiter: "")
        //    //  var d:String=String(a)
        //     return cc
        // }

        if(特殊数字 == 1){
            //println("111111111")
            return 大数字符串(大数)
        }

    if(特殊数字 == 3){

            return 大数字符串(大数)
        }
     if(特殊数字 == 9){

            return 大数字符串(大数)
        }
        if(特殊数字 == 2){
            if(大数>=3){
                 return 按照位置替换(大数,8)
            }

           // return 大数字符串(大数)
        }

        if(特殊数字 == 4){
            if(大数>=5){
                 return 按照位置替换(大数,88)
            }

          //  return 大数字符串(大数)
        }
        
        if(特殊数字 == 5){
            if(大数>=3){
                 return 按照位置替换(大数,5)
            }

          //  return 大数字符串(大数)
        }

        // if(特殊数字 == 8){
        //     if(特殊数字>=7){
        //          return 按照位置替换(大数,888)
        //     }

        //   //  return 大数字符串(大数)
        // }

    if(特殊数字 == 8){
            if(大数>=7){
                 return 按照位置替换(大数,888)
            }

          //  return 大数字符串(大数)
        }

        if(特殊数字 == 6){
            if(大数> 3){
                return 按位置置换特殊数字(大数,8,77,8)
            }
            //return 大数字符串(大数)
        }

 if(特殊数字 == 7){
            if(大数> 0){
                return 数字7回文(大数,特殊数字)
            }
            //return 大数字符串(大数)
        }





       var 大数字符串:String=""
       if(大数 % 2 ==0){
        for(_ in 0..大数){
            大数字符串="${大数字符串}"+"9"
        }
        while(Int64.parse(大数字符串) % 特殊数字!=0&& Int64.parse(大数字符串)>0){
           大数字符串= 回文的一半双数(大数字符串)

        }
        //println("回文 = ${大数字符串}")

       }else {
        for(_ in 0..大数){
            大数字符串="${大数字符串}"+"9"
        }
        while(Int64.parse(大数字符串) % 特殊数字!=0&& Int64.parse(大数字符串)>0){
           大数字符串= 回文一半单数(大数字符串)

        }
       // println("回文 = ${大数字符串}")
       }
        return 大数字符串

    }

    func 回文的一半双数(大数字符串: String):String{
       var  半个回文:Array<Rune> =大数字符串.toRuneArray()
       var 半个:String =""
       for(甲 in 半个回文.size-1..=半个回文.size/2:-1){
       // println(甲)
            半个="${半个.toString()}${半个回文[甲]}"
           // println(半个)
       }
       var 临时数字:Int64 =Int64.parse(半个)-1
       //println(临时数字)
       半个回文=临时数字.toString().toRuneArray()
       半个= ""
       for(甲 in 半个回文.size-1..=0:-1){
            半个="${半个.toString()}${半个回文[甲]}"
       }
       var 一个:String =临时数字.toString()+半个

        return 一个
    }

    func 回文一半单数(大数字符串: String):String{
       var  半个回文:Array<Rune> =大数字符串.toRuneArray()
       var 半个:String =""
       for(甲 in 半个回文.size-1..=半个回文.size/2:-1){
       // println(甲)
            半个="${半个.toString()}${半个回文[甲]}"
           // println(半个)
       }
       var 临时数字:Int64 =Int64.parse(半个)-1
      // println(临时数字)
       半个回文=临时数字.toString().toRuneArray()
       半个= ""
       for(甲 in 半个回文.size-2..=0:-1){
      //  println("甲 = ${甲}")
            半个="${半个.toString()}${半个回文[甲]}"
       }
       var 一个:String =临时数字.toString()+半个

        return 一个
    }
    func 按照位置替换(位数:Int64, 替换数:Int64):String{
        //var 原数数组:Array<Rune>=原数.toString().toRuneArray()
       // var 替换数数组:Array<Rune>=替换数.toString().toRuneArray()
        var 回文:String=替换数.toString()
        for(甲 in 0..位数-替换数.toString().size*2){
            回文= 回文+"9"

        }
        回文=回文+替换数.toString()

        return 回文
    }
    func 大数字符串(位数:Int64 ):String{
       // var 大数字符串:String =""

            var tempA =Array<String>(位数,repeat:"9")
            var 大数字符串=String.join(tempA, delimiter: "")

        // for(_ in 0..位数){
        //     大数字符串=大数字符串+"9"
        // }
        return 大数字符串
    }
    func 按位置置换特殊数字(位数:Int64,单数:Int64,双数:Int64, 两边:Int64):String{
        var 大数字符串数字:String = ""
        if(两边>=0){
            大数字符串数字 = 两边.toString()
        }
        
        if(位数 % 2 ==0){
            if(两边>=0){
                 大数字符串数字 = 大数字符串数字+大数字符串((位数/2-双数.toString().size/2)-(两边.toString().size))

            // for(甲 in 两边.toString().size..位数/2-双数.toString().size/2){ 
            //     大数字符串 = 大数字符串+"9"
            // }
            大数字符串数字 = 大数字符串数字 + 双数.toString()
            大数字符串数字 = 大数字符串数字+大数字符串((位数-两边.toString().size)-(位数/2+双数.toString().size-1))
            // for(甲 in 位数/2+双数.toString().size-1..位数-两边.toString().size){
            //     大数字符串数字 = 大数字符串数字 + "9"
            // }
            if(两边>=0){
            大数字符串数字 = 大数字符串数字 + 两边.toString()
            }
            }else{
                //println("两边小于0 ${位数}")
                大数字符串数字 = 大数字符串数字+大数字符串(位数/2-双数.toString().size/2)
            //     for(甲 in 0..位数/2-双数.toString().size/2){ 
            //     大数字符串数字 = 大数字符串数字+"9"
            // }
            大数字符串数字 = 大数字符串数字 + 双数.toString()
             大数字符串数字 = 大数字符串数字+大数字符串((位数)-(位数/2+双数.toString().size-1))
            // for(甲 in 位数/2+双数.toString().size-1..位数){
            //     大数字符串数字 = 大数字符串数字 + "9"
            // }
            if(两边>=0){
            大数字符串数字 = 大数字符串数字 + 两边.toString()
            }
            }
            
            
            return 大数字符串数字

        }else {
            if(两边>=0){
                 大数字符串数字 = 大数字符串数字+大数字符串((位数/2-单数.toString().size/2)-(两边.toString().size))
            //  for(甲 in 两边.toString().size..位数/2-单数.toString().size/2){
            //     大数字符串数字 = 大数字符串数字+"9"
            // }
            大数字符串数字 = 大数字符串数字 + 单数.toString()
            大数字符串数字 = 大数字符串数字+大数字符串((位数/2-单数.toString().size/2)-(两边.toString().size))
            // for(甲 in 两边.toString().size..位数/2-单数.toString().size/2){
            //     大数字符串数字 = 大数字符串数字 + "9"
            // }
            if(两边>=0){
            大数字符串数字 = 大数字符串数字 + 两边.toString()
            }
            }else{
                 大数字符串数字 = 大数字符串数字+大数字符串(位数/2-单数.toString().size/2)
            //  for(甲 in 0..位数/2-单数.toString().size/2){
            //     大数字符串数字 = 大数字符串数字+"9"
            // }
            大数字符串数字 = 大数字符串数字 + 单数.toString()
            大数字符串数字 = 大数字符串数字+大数字符串(位数/2-单数.toString().size/2)
            // for(甲 in 0..位数/2-单数.toString().size/2){
            //     大数字符串数字 = 大数字符串数字 + "9"
            // }
            if(两边>=0){
            大数字符串数字 = 大数字符串数字 + 两边.toString()
            }
            }
           
            return 大数字符串数字
        }


        return 大数字符串数字
    }

    func 数字7回文(位数:Int64, 特殊数字:Int64):String {

        var 位置:Int64 = 位数 % 6
        var 偏移:Int64 = (位数/6) % 2
       // println(位置)
        //println(偏移)
        if(位置 == 1 && 偏移 == 0){
            return 按位置置换特殊数字(位数,7,-1,-1)
        } else if(位置 == 1 && 偏移 == 1){
            return 按位置置换特殊数字(位数,4,-1,-1)
        }
        if(位置 == 2 && 偏移 == 0){
            return 按位置置换特殊数字(位数,-1,77,-1)
        } else if(位置 == 2  && 偏移 == 1){
            //println("222222222")
            return 按位置置换特殊数字(位数,-1,44,-1)
        }
        if(位置 == 3 && 偏移 == 0){
            return 按位置置换特殊数字(位数,5,-1,-1)
        } else if(位置 == 3  && 偏移 == 1){
            return 按位置置换特殊数字(位数,6,-1,-1)
        }
        if(位置 == 4 && 偏移 == 0 ){
            return 按位置置换特殊数字(位数,-1,77,-1)
        } else if(位置 == 4  && 偏移 == 1){
            return 按位置置换特殊数字(位数,-1,44,-1)
        }
        if(位置 == 5 && 偏移 == 0){
            return 按位置置换特殊数字(位数,7,-1,-1)
        } else if(位置 == 5  && 偏移 == 1){
            return 按位置置换特殊数字(位数,4,-1,-1)
        }
        if(位置 == 0){
            return 大数字符串(位数)
        }
        return 大数字符串(位数)

    }

}

Logo

昇腾计算产业是基于昇腾系列(HUAWEI Ascend)处理器和基础软件构建的全栈 AI计算基础设施、行业应用及服务,https://devpress.csdn.net/organization/setting/general/146749包括昇腾系列处理器、系列硬件、CANN、AI计算框架、应用使能、开发工具链、管理运维工具、行业应用及服务等全产业链

更多推荐