10_24级数和和幂数膜


前言

级数和本来并不难,但是老师给出的代码比我自己写的优化太多;幂数膜则是同学用了逻辑运算符,所以忍不住还是来记录一下。


一、级数和

示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。
这是我的代码(太长了就别看了)

#include <stdio.h>
int main(){
    int n = 0;
    scanf("%d",&n);
    int i = 1;
    float j = 0,k = 0;
    if(n<9){
        while(i<n){
            j = i + (i + 1)/10.0;        //输入打印部分
            printf("%.1f+",j);               //输入打印部分
            j = 0;
            k = k + i + (i + 1)/10.0;        //计算部分
            i++;
        }
        if(i==n){
            j = i + (i + 1)/10.0;
            printf("%.1f",j);
            k = k + i + (i + 1)/10.0;        //计算部分
        }
        printf("=%.2f",k);
    }

    if(n==9){
        while(i<n){
            j = i + (i + 1)/10.0;        //输入打印部分
            printf("%.1f+",j);               //输入打印部分
            j = 0;
            k = k + i + (i + 1)/10.0;        //计算部分
            i++;
        }
        if(i==n){
            j = i + (i + 1)/10.0;
            printf("%.1f",j);
            k = k + i + (i + 1)/10.0;        //计算部分
        }
        printf("=%.2f",k);
    }
    if(n>=9 && n<99){
        while(i<9){
            j = i + (i + 1)/10.0;        //输入打印部分
            printf("%.1f+",j);               //输入打印部分
            j = 0;
            k = k + i + (i + 1)/10.0;        //计算部分
            i++;
        }
        while(i>=9 && i<n){
            j = i + (i + 1)/100.0;
            printf("%.2f+",j);
            j = 0;
            k = k + i + (i + 1)/100.0;
            i++;
        }
        if(i==n){
            j = i + (i + 1)/100.0;
            printf("%.2f",j);
            j = 0;
            k = k + i + (i + 1)/100.0;
        }
        printf("=%.2f",k);
    }
    if(n==99){
        while(i<9){
            j = i + (i + 1)/10.0;        //输入打印部分
            printf("%.1f+",j);               //输入打印部分
            j = 0;
            k = k + i + (i + 1)/10.0;        //计算部分
            i++;
        }
        while(i>=9 && i<n){
            j = i + (i + 1)/100.0;
            printf("%.2f+",j);
            j = 0;
            k = k + i + (i + 1)/100.0;
            i++;
        }
        if(i==n){
            j = i + (i + 1)/1000.0;
            printf("%.2f",j);
            j = 0;
            k = k + i + (i + 1)/1000.0;
        }
        printf("=%.2f",k);
    }
return 0;
}

在这里插入图片描述
结果9.1还打成9.10了,更是心态爆炸
下面是老师的代码

#include <stdio.h>
#include <stdlib.h>
int main()
{
    int n;
    int a=2;
    double b=3,sum=1.2;//不论n等于多少,1.2始终都需要打印。减少一次循环
    scanf("%d",&n);
    printf("1.2");
    while (a<=n)//相当于把n=1踢出去
    {
        if (a<9)//而非a<=9,避免出现9.10
        {   sum+=a+b/10;
            printf("+%lg",a+b/10);
        }
        else if(a<99)
        {
            sum+=a+b/100;
            printf("+%lg",a+b/100);
        }
        a++,b++;
    }
    printf("=%.2lf",sum);
    return 0;
}

在这里插入图片描述
输了呜呜呜
另外在这里分享一下%lg的用法(因为之前一直没用过):
%g与%lg是以十进制和指数中较短形式分别输出float,double型小数
在这里插入图片描述
同时,%lg还有别的用处
在这里插入图片描述
可以看到,在对1.1分别使用%lg和%f输出时,%lg对末尾0进行了省略。
这就意味着,在本题中如果用%lg,就可以避免考虑9.10,99.100这样的情况。
(ps:这里的%lg的原理作用是我自己的实验试出来的,可能有纰漏,欢迎指正)

二、幂数膜

在这里插入图片描述
先上我的

#include<stdio.h>
int pow(int a, int b) {
	int s = 0;
	if (b != 0) {
		for (s = a; b > 1; b--)
			s *= a;
		return s;
	}
	else
		return 1;
		
}
int main() {
	int a = 0, b = 0;
	long long m = 0;
	scanf("%d%d%lld", &a, &b, &m);
	printf("%lld", pow(a, b) % m);
	return 0;
}

再看看同学的

#include<stdio.h>
 
int main()
{
    long long a,b,m,t = 1;
    scanf("%lld %lld %lld",&a,&b,&m);
    while(b != 0)
    {
        if(b & 1)
        	t = (t * a) % m;
        a = (a * a) % m;
        b >>= 1;
    }
    printf("%lld",t);
    return 0;
}
————————————————
版权声明:本文为CSDN博主「二分之无丌」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/m0_71919496/article/details/133515219

原理
对于任意一个幂函数的次数,将其表示为二进制后,如:
a13=a(1*23+1*22+0*21+1*20 )

总结

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值