2 条题解

  • 1
    @ 2026-6-2 23:05:16

    那么问题来了

    注意到他把每个数字拼成一串然后想加每一个数字

    他就和从 1-N 的每个数的每一位相加的和是一个效果

    由于N很小,那么我们直接从1-N 遍历 计算每个数的位数和 全部相加即为答案

    C++

    ll n;
    int main()
    {
        AC;
        cin>>n;
        ll ans=0;
        for(int i=1;i<=n;++i)
        {
            ll x=i;
            while(x>0)
            {
                ans+=x%10;
                x/=10;
            }
        }
        cout<<ans;
        return 0;
    }
    
    

    Python

    n = int(input())
    ans = 0  
    # 遍历 1 到 n 的所有数字
    for i in range(1, n + 1):
        x = i
        # 拆解每一位数字并累加
        while x > 0:
            ans += x % 10  # 取最后一位
            x = x // 10    # 去掉最后一位
    print(ans)
    
    • 0
      @ 2026-6-5 9:01:02

      已经有人给出了通过不断模10整除取出每个数各位的方法,这里给出一份赛场上其他py选手的做法, 通过python内置字符串数字转化来遍历出每一位:

      n = int(input())
      ans = 0
      s = ""
      for i in range(1, n + 1):
          x = str(i)
          s = s + x
      for i in s:
          ans += int(i)
      print(ans)
      
      • 1

      信息

      ID
      1167
      时间
      1000ms
      内存
      256MiB
      难度
      2
      标签
      递交数
      7
      已通过
      7
      上传者