2 条题解

  • 0
    @ 2023-9-27 18:23:00
    #include<cstdio>
    using namespace std;
    int a[10000];
    int main()
    {
    	int n,l=1,x;
    	a[0]=1;
    	scanf("%d",&n);
    	for(int i=2;i<=n;i++)
    	{
    		x=0;
    		for(int j=0;j<l;j++)
    		{
    			if(j==0)//第一位开始即其进位处理
    			{
    			a[j]=a[j]+i+x;
    			x=a[j]/10;
    			a[j]=a[j]%10;
    			}
    		else//对于第一位以后的进位处理
    			{
    			a[j]=a[j]+x;
    			x=a[j]/10;
    			a[j]=a[j]%10;
    			}
    	 }
    	if(x>0)
    		{
    		a[l++]=x;
    		}
    	}
    	while(a[l]==0&&l>=1)
    		l--;
    	for(int i=l;i>=0;i--)
    		printf("%d",a[i]);
    }
    
    
    
    • 0
      @ 2023-4-23 13:36:40
      #include <cstdio>
       
      int a[100],n,l = 1;
       
      void input_data()
      {
          scanf("%d",&n);
      }
       
      void get_ans()
      {
          for (int i = 1;i <= 99;i++) //先给每个位上的数置0
              a[i] = 0;
          for (int i = 1;i <= n;i++) //从1 累加到 n
              {
                  a[1] += i; //直接在个位上递增i
                  for (int i = 1;i <= l;i++) //然后来处理进位问题 直接 + / 然后%一下就好
                      {
                          a[i+1] += (a[i]/10);
                          a[i] = a[i] % 10;
                      }
                  while (a[l+1] > 0) //延长位数。用一个while和l就能搞定
                      {
                          l++;
                          a[l+1] += (a[l] / 10);
                          a[l] = a[l] % 10;
                      }
              }
      }
       
      void output_ans() //最后要逆序输出答案。
      {
          for (int i = l;i >= 1;i--)
              printf("%d",a[i]);
      }
       
      int main()
      {
          input_data();
          get_ans();
          output_ans();
          return 0;
      }
      
      • 1

      信息

      ID
      1196
      时间
      1000ms
      内存
      128MiB
      难度
      4
      标签
      递交数
      66
      已通过
      29
      上传者