仓颉PAT程序设计 L1-017 到底有多二(cangjie)
·

//阶乘
from std import console.*
from std import convert.*
from std import collection.*
from std import math.*
from std import format.*
// import std.format.*
// import std.math.sqrt
// import std.collection.*
//import std.console.*
//import std.convert.*
//判断输入的字符串是否为空。
func getOrThrow(p: ?String): String{
match (p) {
case Some(x) => x
case None => "none"
}
}
//判断输入的字符串是否为数字。返回真假。
func isNumber(number_string :String):Bool{
var number_rune :Array<Rune>=number_string.toRuneArray()
for(number in number_rune){
if(!number.isAsciiNumber()&&number.toString() !=" "){
if(number.toString() !="-"){
return false
}
}
}
return true
}
//获取输入的数字字符串。返回字符串。
func getInputNumber():String{
var input=Console.stdIn.readln()
let input_to_strig: Option<String> = input
var input_to_strig_to :String=getOrThrow(input_to_strig)
if(isNumber(input_to_strig_to)){
return input_to_strig_to
}
return ""
}
//获取数字和输出答案。
func getPrintln(temp :String){
var sig:Float64=1.0
var dou:Float64=1.0
var number:String=""
var sN:Float64=0.0
if(temp.size>0&&temp!="-"){
var temp_arrray_number :Array<String> =temp.split("-",118,)
if(temp_arrray_number.size==2){
sig=1.5
number=temp_arrray_number[1]
}else {
number=temp
}
//删除数字前面多余的0。
var tt:String=""
var boo=false
for(i in number.toRuneArray()){
if(i.toString()!="0"){
tt=tt+i.toString()
boo=true
}else if(boo){
tt=tt+i.toString()
}
}
if(tt==""){
number="0"
}else{
number=tt
}
sN=Float64.parse(number.size.toString()+".0")
var count=0
var tempT:Array<Rune>=number.toRuneArray()
var tN :Int64=Int64.parse(tempT[tempT.size-1].toString())
if(tN%2 ==0){
dou=2.0
}
for(i in number.toString().toRuneArray()){
if(i.toString() == "2"){
count++
}
}
var t:Float64=0.0
if(count>0){
t=Float64.parse(count.toString()+".0")/sN*dou*sig*100.0
}else{
t=0.0
}
if(t>0.0){
println("${t.format("0.2")}%")
}else{
println("0%")
}
}
}
main(){
getPrintln(getInputNumber())
return 0
}
更多推荐



所有评论(0)