1 条题解

  • 0
    @ 2025-8-24 22:27:52

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar 追梦之鲸
    哼~

    搬运于2025-08-24 22:27:52,当前版本为作者最后更新于2021-01-23 20:51:05,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    本蒟蒻的第005005篇题解。

    经典回顾P7226

    窝觉得这道题并不难,难在难理解,所以让窝来让你重温一下题目描述。

    说白了就是给你nn个数q[i]q[i],把q[i]q[i]变成(q[i]/10)q[i]mod10(q[i]/10)^{q[i] \bmod 10}(这个看不懂没关系,下面窝会讲),然后输出1nq[i]\sum_{1}^n q[i](其实就是从q[1]q[1]一直加到q[n]q[n]然后输出)

    窝们以样例为例:

    #1

    212>212212->21^2

    1253>12531253->125^3

    然后问题就变成了212+125321^2+125^3

    #2

    23>2323->2^3

    17>1717->1^7

    43>4343->4^3

    52>5252->5^2

    22>2222->2^2

    然后问题就变成了23+17+43+52+222^3+1^7+4^3+5^2+2^2

    那么问题来了怎么把q[i]q[i]变成(q[i]/10)q[i]mod10(q[i]/10)^{q[i] \bmod 10}呢 (这很明现好吧),让窝们用代码来说一下:

    //求q[i]/10的q[i] mod 10次方
    b=a%10;
    a=a/10;
    if(b==0)//b=0时要特判,因为x的0次方等于1
    {
    	dan++;
    }
    else
    {
    	ans=1;
    	
    	for(int j=1;j<=b;j++)
    	{
    		ans*=a;
    	}
    }
    

    为了保险代码开了unsigned long long(貌似不用?)。

    code:

    #include <bits/stdc++.h>
    #define ull unsigned long long
    using namespace std;
    int n,a,b;
    ull dan,ans;
    int main()
    {
    	scanf("%d",&n);
    	for(int i=1;i<=n;i++)
    	{
    		scanf("%d",&a);
    		b=a%10;
    		a=a/10;
    		if(b==0)
    		{
    			dan++;
    		}
    		else
    		{
    			ans=1;
    			for(int j=1;j<=b;j++)
    			{
    				ans*=(ull)a;
    			}
    			dan+=ans;
    		}
    	}
    	cout<<dan;
    	return 0;
            撒花✿✿ヽ(°▽°)ノ✿
    }
    

    最后管理大大求过&来玩啊&看完辣么辛苦,点个赞吧QAQ

    • 1

    信息

    ID
    6369
    时间
    1000ms
    内存
    128MiB
    难度
    1
    标签
    递交数
    0
    已通过
    0
    上传者