結果

問題 No.756 チャンパーノウン定数 (1)
ユーザー Light606FLight606F
提出日時 2018-12-14 14:18:16
言語 Kotlin
(1.9.23)
結果
WA  
実行時間 -
コード長 1,799 bytes
コンパイル時間 12,119 ms
コンパイル使用メモリ 437,124 KB
実行使用メモリ 54,520 KB
最終ジャッジ日時 2024-04-30 19:43:40
合計ジャッジ時間 17,575 ms
ジャッジサーバーID
(参考情報)
judge4 / judge5
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 WA -
testcase_01 WA -
testcase_02 WA -
testcase_03 WA -
testcase_04 WA -
testcase_05 WA -
testcase_06 WA -
testcase_07 WA -
testcase_08 WA -
testcase_09 WA -
testcase_10 WA -
testcase_11 WA -
testcase_12 WA -
testcase_13 WA -
testcase_14 WA -
testcase_15 WA -
testcase_16 WA -
testcase_17 WA -
testcase_18 WA -
testcase_19 WA -
testcase_20 WA -
testcase_21 WA -
testcase_22 WA -
権限があれば一括ダウンロードができます
コンパイルメッセージ
Main.kt:45:5: warning: unreachable code
    return -x
    ^

ソースコード

diff #

/**
 * You can edit, run, and share this code. 
 * play.kotlinlang.org 
 */
import kotlin.math.*

fun main() {
    println(f(190f))
    println(f(191f))
    println(f(192f))
    println(f(3553f))
}

fun f(x: Float): Float{
    println("input = " + x)
    
    var keta=1
    while(x>=numKeta(keta)){
        keta++
    }
    println("keta = " + keta)
    
    if(keta == 1){
        return x
    }else{
        val to0 = numKeta(keta-1)%keta
        var flag: Float
        
        flag = x%keta-to0
        if(flag < 0){
            flag = keta + flag
        }
        val num = floor((x-numKeta(keta-1))/(keta)) +10f.pow(keta-1)	//0を0として何個目か
        println("0を0として何個目か : " + num)
        println("no nankomeka : " + flag)

        var k: Array<Float?> = arrayOfNulls(keta)
        for(i in keta-1 downTo 0){
            val diff = keta-(i+1)
            k[i] = floor(num/10f.pow(i)) - minusNum(k, keta, diff)
        }
        return k[keta-1-flag.toInt()]!!
    }
    
    return -x
}

fun minusNum(k: Array<Float?>, keta:Int, diff: Int): Int{
    if(diff==0){
        return 0
    }else if(diff<0){
        println("ERROR001")
        return -1
    }else{
        var sum: Float = 0f
        for(i in 0..diff-1){
//             println("in munusNum, i : " + i)
//             println("in munusNum, keta-i : " + (keta-i))
            sum += k[keta-(i+1)]!!*10f.pow(diff-i)
        }
        return sum.toInt()
    }
}

fun numKeta(keta: Int): Int{	//桁までの数字の数
    var sum = 0
    for(i in 1..keta){
    	sum += forSigNumKeta(i)
    }
    return sum
}

fun forSigNumKeta(n: Int): Int{
    if(n<=0){
        println("ERROR")
        return -1
    }
    
    if(n == 1){
        return 10
    }else{
        return (9*10f.pow(n-1)*n).toInt()
    }
}
0