Typescript函数例题

目录

一、估算π

题目

代码

运行结果

二、检测密码

题目

代码

运行结果

三、回文素数

题目

代码

运行结果

四、双素数

题目

代码

运行结果

五、最大公约数和最小公倍数

题目

代码

运行结果

一、估算π

题目

代码

function fn1(n:number){
    let sum = 0;
    let i = n;
    for(i;i>=1;i--){
        if(i%2!==0){
            sum += 1/(2*i-1);
        }else if(i%2===0){
            sum += -(1/(2*i-1));
        }
    }
    sum *= 4; 
    console.log(n+'\t'+sum.toFixed(4));
}

console.log('i'+'\t'+'m(i)');
console.log('--------------');
fn1(1);
fn1(101);
fn1(201);
fn1(301);
fn1(401);
fn1(501);
fn1(601);
fn1(701);
fn1(801);

运行结果

二、检测密码

题目

一些网站对于密码具有一些规则。编写一个方法,检测字符串是否是一个有效密码。

假定密码规则如下:

  • 密码必须至少8位字符。
  • 密码仅能包含字母和数字、
  • 密码必须包含至少两个数字。

编写一个程序,提示用户输入一个密码,如果符合规则,则显示Valid Password,否则显示Invalid Password。

代码

function fn2(str:string){
    let reg = /^[A-Za-z\d]{8,}$/g;
    let cnt:number = 0;
    for(let i=0;i<str.length;i++){
        if(str.charAt(i)>='0' && str.charAt(i)<='9'){
            cnt++;
        }
    }
    if(cnt<2){
        return 'Invlid Password';
    }
    if(reg.test(str)){
        return 'Valid Password';
    }else{
        return 'Invlid Password';
    }
}

console.log(fn2("123456"));
console.log(fn2("12345678"));
console.log(fn2("12shk$jg*n"));
console.log(fn2("asdfgh"));
console.log(fn2("asdfghjkl"));
console.log(fn2("1hhkffrts"));
console.log(fn2("1hhkf5frts"));
console.log(fn2("1hhkf5fr3ts"));

运行结果

三、回文素数

题目

回文素数是指一个数同时为素数和回文数。例如:131是一个素数,同时也是一个回文素数。数字313和757也是如此。编写程序,显示前100个回文素数。每行显示10个数并准确对齐,数字中间用空格隔开。如下所示:

2 3 5 7 11 101 131 151 181 191

313 353 373 383 727 787 797 919 929

……

代码

function isPrime1(x:number){
    let temp = Math.sqrt(x);
    for(let i=2;i<=temp;i++){
        if(x%i === 0)   return false;
    }
    return true; 
}

function palinDrome(x:number){
    let str = x.toString();
    for(let i=0;i<str.length/2;i++){
        if(str.charAt(i) !== str.charAt(str.length-i-1)){
            return false;
        }
    }
    return true;
}

function fn3(k:number){
    let str:string = '';
    let i:number = 2,
        cnt1:number = 0,    //行
        cnt2:number = 0;    //总
    while(true){
        if(isPrime1(i)&&palinDrome(i)){
            if(cnt1<10){
                str += i + '\t';
                cnt1++;
                cnt2++;
                if(cnt1===10){
                    str += '\t';
                    cnt1 = 0;
                }
            }
        }
        i++;
        if(cnt2===k){
            return str;
        }
    }
}

console.log(fn3(100));

运行结果

四、双素数

题目

双素数是指一对差值为2的素数。例如:3和5就是一对双素数,5和7就是一对双素数,而11和13也是一对双素数。编写程序,找出小于1000的所有双素数。显示结果如下所示:

(3,5)

(5,7)

   ……

代码

function isPrime2(x:number){
    let temp = Math.sqrt(x);
    for(let i=2;i<=temp;i++){
        if(x%i === 0)   return false;
    }
    return true; 
}

function fn4(n:number){
    for(let i=2;i<=n;i++){
        if(isPrime2(i)&&isPrime2(i+2)){
            console.log('('+i+','+(i+2)+')');
        }
    }
}

fn4(1000);

运行结果

(3,5)

(5,7)

(11,13)

(17,19)

(29,31)

(41,43)

(59,61)

(71,73)

(101,103)

(107,109)

(137,139)

(149,151)

(179,181)

(191,193)

(197,199)

(227,229)

(239,241)

(269,271)

(281,283)

(311,313)

(347,349)

(419,421)

(431,433)

(461,463)

(521,523)

(569,571)

(599,601)

(617,619)

(641,643)

(659,661)

(809,811)

(821,823)

(827,829)

(857,859)

(881,883)

五、最大公约数和最小公倍数

题目

编写一个方法用于求任意两个正整数的最大公约数,调用此方法求16和24的最大公约数和最小公倍数。

注:求最大公约数使用辗转相除法,我国古代数学家秦九韶1247年在《数书九章》中记载了此方法,其处理过程如下:

(1)提供两个数m和n

(2)以n除m,求得余数r(r=m%n)

(3)判断r是否为0,若r=0,此时的n值即为最大公约数,计算结束。若r≠0,更新被除数和除数,n送m(即m=n),r送n(即n=r),转到(2)。

代码

function fn5_yue(m:number,n:number){
    // 最大公约数

    let r:number = m%n;
    while(r){
        m = n;
        n = r;
        r = m%n; 
    }

    return n;
}

function fn5_bei(m:number,n:number){
    // 最小公倍数

    let remainder = fn5_yue(m,n);
    return m*n/remainder;
}

function fn5(m:number,n:number){

    console.log(m+"和"+n+"的最大公约数是:"+fn5_yue(m,n));
    console.log(m+"和"+n+"的最小公倍数是:"+fn5_bei(m,n));

}

fn5(16,24);

运行结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值