6 条题解

  • 4
    @ 2022-8-6 22:32:06
    #include<bits/stdc++.h>
    using namespace std;
    const int mod = 1e9+7;
    string s;
    // space为空格数量(没让取模),sum为求和结果,len为输入的数组长度,num为等待加入sum的数字
    long long space,sum,len,num; // 不开long long见祖宗QwQ
    ···
        ···
        getline(cin,s);
        len=s.length(); // 节省时间
        for(int i=0;i<len;i++){
            if(s[i]==' '){
                space++;
                sum=(num+sum)%mod; // 求和并及时取模
                num=0;
                continue; // 直接进入下个循环,不执行num的赋值语句
            }
            // 虽然是实时取模,但是还是有可能有一个时刻数据范围超出int,然后再被取模,导致WA
            num=(num*10+(s[i]-'0'))%mod; // 把num乘10后腾出各位然后加上s[i]的整数形式并及时取模
        }
        sum=(sum+num)%mod; // 由于在最后一个循环不会遇上空格,所以sum的赋值不会执行,需要补一个
        cout<<space<<" "<<sum;
    ···
    
    • 2
      @ 2023-10-7 21:22:53
      #include <bits/stdc++.h>
      using namespace std;
      const int mods=1e9+7;
      string s;
      long long cnt,sum,len,num;
      int main(){
      	getline(cin,s);
      	len=s.length();
      	for (int i=0;i<len;i++){
      		if (s[i]==' '){
      			cnt++;
      			sum=(num+sum)%mods;
      			num=0;
      			continue;
      		}
      		num=(num*10+(s[i]-'0'))%mods;
      	}
      	cout<<cnt<<" "<<(sum+num)%mods;
      	return 0;
      } 
      
      • 2
        @ 2021-8-26 11:13:24

        输入带空格的字符串

        当需要读取一行包含空格的字符串时,可以使用 getline(cin, s); 的方式,读入一整行到字符串 ss 中。

        取余(模运算)

        以下等式都是成立的

        (a + b) % c == (a % c + b % c) % c
        (a * b) % c == ((a % c) * (b % c)) % c
        (a * b + x * y) % c == 
          ( ((a % c) * (b % c)) % c + 
            ((x % c) * (y % c)) % c ) % c
        

        而一个十进制整数 123456==1×105+2×104+3×103+4×102+5×10+6123456 == 1\times 10^5 + 2\times 10^4 + 3\times 10^3 + 4\times 10^2 + 5 \times 10 + 6,因此可以用下面程序中的方法处理。

            getline(cin, s);
            int cnt, now, ans;
            cnt = now = ans = 0;
            for (int i = 0; i < s.length(); i++)
            {
                if (s[i] == ' ')
                {
                    cnt++;
                    ans = (ans + now) % MODNUM;
                    now = 0;
                }
                else
                    now = (now * 10 + s[i] - '0') % MODNUM;
            }
            ans = (ans + now) % MODNUM;
            cout << cnt << " " << ans << endl;
        
        • 1
          @ 2024-5-18 20:48:26

          image

          • -13
            @ 2023-7-5 12:22:33

            • -13
              @ 2022-4-24 16:58:00

              写题解请注意

              鼓励大家写题解,但注意题解格式。

              题解一定要有思路解析或代码注释,能否让别人理解你的思路

              也是你的能力的检验,不要只放无意义的代码给大家复制,那就失去了做题的初心。

              给代码两端加上这个会舒服一些

              ```cpp

              你的代码

              ```

              </span>

              这个点在键盘的左上角tab上面那个键,注意切换输入法

              #include<iostream>
              using namespace std;
              int main()
              {
                  int n;
                  cin>>n;//这是一个注释
                  return 0;
              } 
              

              请注意严禁抄袭题解,写题解不要只放代码,需加上你的思路或代码注释。

              抄袭题解一经发现直接取消成绩。

              题解被删除的可能

              1. 代码不符合格式规范
              2. 没有思路讲解或者没有注释,
              3. 无意义的题解

              大家携手共同维护一个良好的编程环境,如果一经发现,多次作乱。可能会被管理员拉黑,请注意,一旦拉黑即失去登陆资格。

              • 1

              信息

              ID
              1227
              时间
              1000ms
              内存
              256MiB
              难度
              5
              标签
              递交数
              373
              已通过
              143
              上传者